Arhn - архитектура программирования

Получение ввода tkinter.Entry в операторы if/else

Вот мой текущий код, который я несколько раз менял, используя здесь разные ответы на разные вопросы. Проблема в том, что я пытаюсь найти способ заставить код выводить разные ответы в соответствии с пользовательским вводом через tkinter.Entry().

Например, если пользователь вводит «экран», код выдаст что-то об экранах. Если пользователь введет «Python», код напечатает что-то, связанное с языком программирования python.

Я могу получить код для печати того, что пользователь ввел при нажатии кнопки с помощью функции .get(), однако таким образом он не будет взаимодействовать с операторами if/else.


import tkinter

root = tkinter.Tk()
root.geometry("300x300")
root.title("Try code")

entry = tkinter.Entry(root)
entry.pack()

def on_button():
    if entry.get() == "Screen""screen":
        slabel = tkinter.Label(root, text="Screen was entered")
        slabel.pack()
    else:
        tlabel = tkinter.Label(root, text="")
        tlabel.pack()

button = tkinter.Button(root, text="Enter", command=on_button)
button.pack()

root.mainloop()

Любая помощь будет принята с благодарностью.


  • if entry.get() == "Screen""screen": верно только в том случае, если текст записи точно равен Screenscreen. 11.12.2016

Ответы:


1

Вы можете преобразовать строку в нижний регистр и сравнить только с "screen"

 if entry.get().strip().lower() == "screen":

Я использую strip() для удаления пробелов на обоих концах строки, потому что иногда пользователь может вводить лишние пробелы, т.е. " screen "

Или вы можете использовать in

 if entry.get().strip() in ("Screen", "screen", "Monitor", "monitor"):

 if entry.get().strip().lower() in ("screen", "monitor"):

потому что он короче

 if entry.get().strip() == "Screen" or entry.get().strip() == "screen" or entry.get().strip() == "Monitor" or entry.get().strip() == "monitor":

 if entry.get().strip().lower() == "screen" or entry.get().strip().lower() == "monitor":

Вы также можете использовать strip().lower() перед if/else

 answer = entry.get().strip().lower()

 if answer in ("screen", "monitor"):
     # ...
 elif answer in ("mouse", "trackball"):
     # ...
 elif answer == "keyboard":
     # ...

Рабочий пример

import tkinter as tk

# --- functions ---
# `bind` sends `event` to function so it has to receive it
# `command=` doesn't sends `event` so it need some default value - ie. None
def on_button(event=None): 

    answer = entry.get().strip().lower()

    if answer in ("screen", "monitor"):
        # change text in existing label
        label['text'] = "Your {} is dirty. I can't see you.".format(answer)

    elif answer in ("mouse", "trackball"):
        label['text'] = "Your {} is too slow for me".format(answer)

    else:
        label['text'] = "{0}? What is {0}?".format(answer)

# --- main ---

root = tk.Tk()
root.geometry("300x300")
root.title("Try code")

entry = tk.Entry(root)
entry.pack()

# run function when in `entry` you press `ENTER` on keyboard 
entry.bind('<Return>', on_button) 

button = tk.Button(root, text="Enter", command=on_button)
button.pack()

label = tk.Label(root)
label.pack()

# activate `entry` so you don't have to click in `entry` to start typing
entry.focus() 

root.mainloop()
11.12.2016
  • Я решил использовать простой метод if entry.get().strip().lower() in (screen, monitor):... однако есть способ заставить его работать для таких фраз, как треснувший экран, которые будут отличаться на не отвечающий экран 11.12.2016

  • 2

    Ваше логическое выражение в операторе if было неправильным. Вы должны явно указать Python, что именно вы хотите сделать:

    import tkinter
    
    root = tkinter.Tk()
    root.geometry("300x300")
    root.title("Try code")
    
    entry = tkinter.Entry(root)
    entry.pack()
    print(entry.get())
    def on_button():
        if entry.get() == "Screen" or entry.get() == "screen": #corrected
            slabel = tkinter.Label(root, text="Screen was entered")
            slabel.pack()
        else:
            tlabel = tkinter.Label(root, text="")
            tlabel.pack()
    
    button = tkinter.Button(root, text="Enter", command=on_button)
    button.pack()
    
    root.mainloop()
    

    И теперь это работает:

    введите здесь описание изображения

    11.12.2016
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..