【问题标题】:How to handle a Button click event如何处理按钮单击事件
【发布时间】:2011-10-16 00:21:25
【问题描述】:

我刚刚学习 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()

【问题讨论】:

    标签: python events button tkinter


    【解决方案1】:

    你已经有了你的事件函数。只需将您的代码更正为:

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

    【讨论】:

      【解决方案2】:

      您应该指定一个处理程序,或一个函数,当您单击按钮时调用它。您可以通过将函数的名称(不调用函数)分配给 Button 的属性 command 来执行此操作。

      例如:

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

      在将buttonClick 指定为self.submitButtoncommand 属性时,请注意() 的缺失。

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

      【讨论】:

      • 谢谢。我忘了你可以使用函数名而不用结尾“()”来调用它们。我想知道为什么我打算从按钮调用的过程与 GUI 同时弹出,就是这样。我对 GUI 很陌生
      【解决方案3】:

      我找到了一个很好的参考资料,叫做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()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-12
        • 2016-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多