如何处理按钮点击事件
我正在学习Python,基础概念已经掌握,并且写了一些命令行程序。现在我在学习如何用Tkinter创建图形用户界面(GUI)。
我做了一个简单的界面,可以从一个Entry
控件中获取用户信息,然后当用户点击提交时,它应该弹出一个对话框。
这个对话框应该询问用户的名字和姓氏。
问题是我不知道如何处理用户点击提交时的事件。
这是我的代码:
from Tkinter import *
class GUI(Frame):
def __init__(self,master=None):
Frame.__init__(self, master)
self.grid()
self.fnameLabel = Label(master, text="First Name")
self.fnameLabel.grid()
self.fnameEntry = Entry(master)
self.fnameEntry.grid()
self.lnameLabel = Label(master, text="Last Name")
self.lnameLabel.grid()
self.lnameEntry = Entry(master)
self.lnameEntry.grid()
self.submitButton = Button(self.buttonClick, text="Submit")
self.submitButton.grid()
def buttonClick(self, event):
""" handle button click event and output text from entry area"""
pass
if __name__ == "__main__":
guiFrame = GUI()
guiFrame.mainloop()
3 个回答
4
我找到了一本很不错的参考资料,叫做 Thinking in Tkinter
,然后我对它做了一些修改。我的目的是让它更符合你的需求。
from tkinter import *
class GUI(Frame):
def __init__(self,master=None):
Frame.__init__(self, master)
self.grid()
self.fnameLabel = Label(master, text="First Name")
self.fnameLabel.grid()
self.fnameEntry = StringVar()
self.fnameEntry = Entry(textvariable=self.fnameEntry)
self.fnameEntry.grid()
self.lnameLabel = Label(master, text="Last Name")
self.lnameLabel.grid()
self.lnameEntry = StringVar()
self.lnameEntry = Entry(textvariable=self.lnameEntry)
self.lnameEntry.grid()
def buttonClick():
print("You pressed Submit!")
print(self.fnameEntry.get() + " " + self.lnameEntry.get() +",
you clicked the button!")
self.submitButton = Button(master, text="Submit", command=buttonClick)
self.submitButton.grid()
if __name__ == "__main__":
guiFrame = GUI()
guiFrame.mainloop()
4
你需要指定一个处理器,或者说一个函数,当你点击按钮时会被调用。你可以通过把这个函数的名字(注意,不是调用这个函数)赋值给按钮的command
属性来实现。
比如:
self.submitButton = Button(self.buttonClick, text="Submit", command=buttonClick)
注意在把buttonClick
作为self.submitButton
的command
属性时,没有加()
。
另外,你在处理器/函数buttonClick()
中不需要第二个参数event
。
10
你已经有了事件函数。只需要把你的代码改成:
"""Create Submit Button"""
self.submitButton = Button(master, command=self.buttonClick, text="Submit")
self.submitButton.grid()
def buttonClick(self):
""" handle button click event and output text from entry area"""
print('hello') # do here whatever you want
这和@Freak的回答是一样的,唯一不同的是buttonClick()
方法现在放在了类的__init__
方法外面。这样做的好处是,你可以通过程序来调用这个动作。这是面向对象编程(OOP)中编写图形用户界面(GUI)的常见方式。