如何处理Button click事件

时间:2011-07-29 14:17:04

标签: python events button tkinter

我只是学习Python而且我已经掌握了基本概念,并且已经有一些命令行程序。我现在正在学习如何使用Tkinter创建GUI。

我创建了一个简单的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 个答案:

答案 0 :(得分:5)

您已经拥有了自己的活动功能。只需将您的代码更正为:

   """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中的传统方式。

答案 1 :(得分:2)

您应该指定单击Button时调用的处理程序或函数。你可以这样做,我将函数的名称(不调用函数)分配给Button的属性command

例如:

self.submitButton = Button(self.buttonClick, text="Submit", command=buttonClick)

请注意,()作为buttonClick的{​​{1}}属性时,command不存在。

请注意,您的处理程序/函数self.submitButton中不需要名为event的第二个参数。

答案 2 :(得分:2)

我发现了一个名为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()