Tkinter: Как назначить две команды кнопке через функцию? - PullRequest
0 голосов
/ 08 июня 2018

Я хочу сделать запись "Введите имя", которая печатает приветственное сообщение для пользователя.Недавно я написал с просьбой помочь о том, как переключать кадры в tkinter.Я понял это и решил эту проблему.

Однако теперь я хочу переключать кадры и , печатая запись на этикетке при нажатии кнопки.Я не получаю никаких ошибок в своем коде, однако функция returnEntry() ничего не делает.Он не поднимает фрейм, и я не думаю, что он также извлекает текст ввода (без функции returnEntry() фрейм делает фреймом, но с кодом - нет.это имеет смысл, или я все усложняю?

Вот код:

def show_frame(frame):
    frame.tkraise()


def returnEntry():
    result=NameEntry.get()
    Label3.config(text=result)

def WelcomeName():
    show_frame(f3)
    returnEntry()


f1 = Frame(root)
f2 = Frame(root)
f3 = Frame(root)
f4 = Frame(root)
for frame in (f1, f2, f3, f4):
    frame.config(width=500,height=500, bg="light blue")
    frame.place(relx=0.5,rely=0.5,anchor="center")


#First Page
Button(f1, text='Click to Play', command=lambda: show_frame(f2)).place(relx=0.5,rely=0.5,anchor="center")
Label(f1, text='Magic 8 Ball', fg="White", bg="dark blue",
      font="Veranda 19").place(relx=0.5,rely=0.20,anchor="center")


#Second page
Label(f2, text='Enter your name:',fg="White", bg="dark blue",
      font="veranda 17").place(relx=0.5,rely=0.40,anchor="center")
NameEntry=Entry(f2,font="veranda 15").place(relx=0.5,rely=0.5,anchor="center")
Button2=Button(f2, text='Continue', font="veranda 15",
       command=lambda: returnEntry).place(relx=0.5,rely=0.60,anchor="center")


#Third Page
Label3=Label(f3,text="",bg="light blue",font="veranda 15").place(relx=0.5,rely=0.35,anchor="center")
Label4=Label(f3, text="Ask me a yes or no question and reveal the truth" , bg="light blue",font="veranda 15")
Label4.place(relx=0.5,rely=0.45,anchor="center")
QuestionEntry=Entry(f3, font="veranda 15").place(relx=0.5,rely=0.52,anchor="center")
Button(f3, text='Ask away', command=lambda: show_frame(f4)).place(relx=0.5,rely=0.6,anchor="center")

Извините за неаккуратный код и т.д ...

1 Ответ

0 голосов
/ 08 июня 2018

Вы не можете.Вам нужно будет создать третью функцию, которая вызывает две нужные функции, и передать эту третью функцию команде Button.

def on_click():
    do_thing_1()
    do_thing_2()

btn = Button(command=on_click)

Я настоятельно рекомендую вам держаться подальше от lambda, пока вы не узнаете, как это работает.

Кроме того, вы не должны инициализировать и размещать виджеты в одной строке, это приводит к ошибкам.Всегда используйте 2 строки.

# BAD: NameEntry is None, and can't be used
NameEntry=Entry(f2,font="veranda 15").place(relx=0.5,rely=0.5,anchor="center")

# good: NameEntry is an Entry instance, and can be used later
NameEntry=Entry(f2,font="veranda 15")
NameEntry.place(relx=0.5,rely=0.5,anchor="center")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...