Как передать аргумент через кнопку в tkinter - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь создать базовую программу на Python 3.7 для школьного проекта, которая при нажатии кнопки печатает строку текста. Кто-нибудь есть какие-либо идеи о том, что я сделал неправильно, пожалуйста?

Я пытался использовать лямбда-функцию, но она выдает мне сообщение об ошибке.

#This is what I have tried:

import tkinter

window = tkinter.Tk()
button1 = tkinter.Button(window, text = "Press Me1", command= lambda: action("1"))
button2 = tkinter.Button(window, text = "Press Me2", command= lambda: action("2"))
button1.pack()
button2.pack()
window.mainloop()

if button1 == "1":
    print("Button 1 was pressed.")
elif button2 == "2":
    print("Button 2 was pressed.")

I'm expecting that, when you press one of the buttons, it prints the specified statement.

#However, I get the following error message:

Exception in Tkinter callback
Traceback (most recent call last):
    File "C:\Users\liamd\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
    File "C:\Users\liamd\Documents\!!!!MY STUFF!!!!\Python\Bankaccount Assessment - Simplified - And Again.py", line 4, in <lambda>
    button1 = tkinter.Button(window, text = "Press Me1", command= lambda: action("1"))
NameError: name 'action' is not defined

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Вам необходимо предоставить реализацию для action функции, прежде чем вызывать ее, например:

def action(message):
    print(message)

Таким образом, ваш код будет выглядеть так:

import tkinter

def action(message):
    print(message)

window = tkinter.Tk()
button1 = tkinter.Button(window, text = "Press Me1", command= lambda: action("Button 1 was pressed"))
button2 = tkinter.Button(window, text = "Press Me2", command= lambda: action("Button 2 was pressed"))
button1.pack()
button2.pack()
window.mainloop()

илив качестве альтернативы, вы можете заменить все ваши action вызовы print() вызовами:

button1 = tkinter.Button(window, text = "Press Me1", command= lambda: print("Button 1 was pressed"))
button1 = tkinter.Button(window, text = "Press Me1", command= lambda: print("Button 2 was pressed"))

Условия if ничего не сделают, потому что они не запускаются нажатием кнопки.

0 голосов
/ 11 апреля 2019

Другой способ сделать это - определить конкретные функции для нажатия кнопок.Если вы планируете, чтобы при нажатии кнопки происходили другие действия, это может быть полезно.

import tkinter

#This is what I added to get the buttons to work.
def on_button_1():
    print('Button 1 was pressed.')
def on_button_2():
    print('Button 2 was pressed.')


window = tkinter.Tk()
#changed these next 2 lines so that each button calls the appropriate function
button1 = tkinter.Button(window, text = "Press Me1", command= on_button_1)
button2 = tkinter.Button(window, text = "Press Me2", command= on_button_2)
button1.pack()
button2.pack()
window.mainloop()
...