如何处理按钮连击

2024-05-01 22:01:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习Python,我已经有了基本的概念,并且已经有了一些命令行程序。我现在正在学习如何用Tkinter创建gui。

我创建了一个简单的GUI来接受来自Entry小部件的一些用户信息,然后,当用户单击submit时,它应该会弹出一个对话框。

对话框应要求输入

问题是,当用户单击提交时,我不知道如何处理事件。

这是我的代码:

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()

Tags: text用户fromselfmasterinittkinterdef
3条回答

我找到了一个很好的引用,叫做^{},我把它删掉了一点。我试着让它符合你的要求。

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()

您应该指定一个处理程序或一个函数,单击该按钮时将调用该函数。我可以将函数的名称(而不是调用函数)分配给按钮的属性command来完成这个任务。

例如:

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

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

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

你已经有了你的事件功能。只需将代码更正为:

   """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中的常规方法

相关问题 更多 >