Tkinter Python, get () не сохраняет текст записи. Как мне это исправить? - PullRequest
0 голосов
/ 19 апреля 2020

Я использую Tkinter для GUI для моего проекта (если вы введете нужные ингредиенты в текстовое поле, он вернет рецепты с использованием API ... и т. Д.). Я пытаюсь сохранить пользовательский ввод в переменную, чтобы я мог использовать его позже. Однако функция get (), похоже, ничего не перехватывает. Я прочитал другой пост, но не уверен, что я делаю это неправильно. Вот мой код:

import tkinter as tk
import tkinter.font as font

# globally declare the expression variable
expression = ""


def getSentence():
    global expression
    # clear the entry fields
    deleteEntryFields()

    # ask a question
    field2.insert(0, 'What do you want to eat? You can express and we will find something for you!')

    expression = v.get()

    return expression


def getIngredients():
    pass

def searchWithSentence(sentence):
    pass

def searchIngredients(ingredients):
    pass

################################################################################
# This is where I'm testing if the user input is saved to a variable expression.
def enter():
    field1.insert(0, str(expression))
    print(expression)
################################################################################


def clear():
    global expression
    expression = ""


def deleteEntryFields():
    field1.delete(0, 'end')
    field2.delete(0, 'end')


# Driver code
if __name__ == "__main__":
    # create a GUI window
    master = tk.Tk()

    v = tk.StringVar()

    field1 = tk.Entry(master, textvariable=v)
    field2 = tk.Entry(master)

    field1.insert(0, 'Please type here')
    field2.insert(0, 'Results will be shown here.')

    field1.place(x=20, y=20, width=730, height=50)
    field2.place(x=20, y=80, width=730, height=500)

    # set the background colour of GUI window
    master.configure(background="lemon chiffon")

    # set the title of GUI window
    master.title("Recipe Finder")

    # set the configuration of GUI window
    master.geometry("1050x600")

    # set font
    myFont = font.Font(family='Verdana', size=9, weight='bold')

    # Buttons
    button1 = tk.Button(master, text=' What do you feel like eating? ', fg='black', bg='salmon',
                        command=getSentence, height=5, width=30)
    button1.place(x=770, y=100)
    button1['font'] = myFont

    button2 = tk.Button(master, text=' Type the ingredients you have! ', fg='black', bg='orange',
                        command=getIngredients, height=5, width=30)
    button2.place(x=770, y=200)
    button2['font'] = myFont

    Clear = tk.Button(master, text=' CLEAR ', fg='black', bg='white',
                      command=clear, height=5, width=30)
    Clear.place(x=770, y=300)
    Clear['font'] = myFont

    Enter = tk.Button(master, text=' ENTER ', fg='black', bg='white',
                      command=enter, height=5, width=30)
    Enter.place(x=770, y=400)
    Enter['font'] = myFont


# start the GUI
master.mainloop()

Ранее я не использовал StringVar (), но когда я провел какое-то исследование, он говорит, что это может быть одним из способов заставить работать функцию get (). Но ничего не произошло ... Как я могу эффективно получить пользовательский ввод и сохранить его в глобальной переменной? Любой совет будет оценен!

1 Ответ

1 голос
/ 20 апреля 2020

Вы используете Entry, чтобы содержать объяснение, что печатать?

Чтобы это работало, вы могли бы bind обратный вызов, который очищает запись в <FocusIn> событие. Это гарантирует, что поле ввода будет пустым, когда пользователь хочет что-то набрать.

И чтобы быть последовательным, вам придется восстановить этот текст в событии <FocusOut> в случае, если пользователь не сделал ' Не заполняйте что-либо.

Хотя это используется в местах, где пространство на экране чрезвычайно ограничено, это не похоже на хороший дизайн пользовательского интерфейса. Более распространенный метод - поставить Label с описанием перед Entry.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...