Python TTK检测按钮点击

Python TTK检测按钮点击,python,tkinter,Python,Tkinter,我有一个登录框架类,我正在将它添加到根窗口。我想做的是检测何时从代码中标记为:使用用户名和密码检测登录并退出按钮单击此处的登录框中单击按钮。这样做的目的是将ui与身份验证方法分开。我怎么做?谢谢是预付款 代码如下所示: class LoginFrame(ttk.Frame): def __init__(self, parent): login_frame = ttk.Frame(parent) login_frame.pack(pady=70)

我有一个登录框架类,我正在将它添加到根窗口。我想做的是检测何时从代码中标记为:使用用户名和密码检测登录并退出按钮单击此处的登录框中单击按钮。这样做的目的是将ui与身份验证方法分开。我怎么做?谢谢是预付款

代码如下所示:

class LoginFrame(ttk.Frame):
    def __init__(self, parent):

        login_frame = ttk.Frame(parent)
        login_frame.pack(pady=70)

        logo = ttk.Label(login_frame, text="Login")
        logo.grid(row=0, column=0, columnspan=2, pady=10)

        username = ttk.Entry(login_frame)
        username.grid(row=20, column=0, columnspan=2, padx=10, pady=10, sticky="ew")

        password = ttk.Entry(login_frame)
        password.configure(show="#")
        password.grid(row=30, column=0, columnspan=2, padx=10, pady=10, sticky="ew")

        login_btn = ttk.Button(login_frame, text="Login", command=self.authenticate)
        login_btn.grid(row=40, column=0, columnspan=1, padx=10, pady=10, sticky="ew")

        quit_btn = ttk.Button(login_frame, text="Quit", command=self.quit_app)
        quit_btn.grid(row=40, column=1, columnspan=1, padx=10, pady=10, sticky="ew")

        error_lbl = ttk.Label(login_frame, justify="center", foreground="#FF0000")
        error_lbl.grid(row=50, column=0, columnspan=2, padx=10, pady=10, sticky="ew")

        username.focus_set()

    def authenticate(self):
        #return login button is clicked with username and password
        pass

    def quit_app(self):
        #return quit button is clicked
        pass

root = Tk()
root.config(background="light grey")
root.resizable(width=False, height=False)
root.geometry("800x500")
lf = LoginFrame(root)

#Detect login with username and password and quit button click here

root.mainloop()

您需要有一个名为回调的命令

login_btn = ttk.Button(login_frame, text="Login")
login_btn.grid(row=40, column=0, columnspan=1, padx=10, pady=10, sticky="ew", command=authenticate)
请注意,新的part命令=authenticate

命令可以设置为任何方法


我会让你找到退出按钮,我不想做任何事情,自己做一些事情会有帮助。

你需要它来拥有一个名为回调的命令

login_btn = ttk.Button(login_frame, text="Login")
login_btn.grid(row=40, column=0, columnspan=1, padx=10, pady=10, sticky="ew", command=authenticate)
请注意,新的part命令=authenticate

命令可以设置为任何方法


我会让你找出“退出”按钮,我不想做所有事情,自己做一些事情会有帮助。

你的要求没有意义。lf=。。。和root.mainloop。wqy GUI的工作是创建小部件并将命令绑定到它们,然后tkinter将在单击小部件时调用这些命令


如果您希望在用户单击“登录”按钮后发生某些事情,请将命令与之关联,并在该命令中输入您想要执行的任何代码

你问的没有意义。lf=。。。和root.mainloop。wqy GUI的工作是创建小部件并将命令绑定到它们,然后tkinter将在单击小部件时调用这些命令


如果您希望在用户单击“登录”按钮后发生某些事情,请将命令与之关联,并在该命令中输入您想要执行的任何代码

我已经添加了命令,我以前忘记了添加命令。我知道如何添加回调命令。我需要的是在lf=LoginFrameroot之后检测按钮单击。在调用lf=LoginFrameroot之前,它不允许您单击按钮。在调用root.mainloop之前,框架将不会被设置。您可以建议其他方法吗?@huber.duber:在调用root.mainloop之前,GUI不会发生任何事情。在执行时,tkinter将在用户与各种小部件(如按钮)交互时调用与它们关联的命令。这是大多数GUI程序中常见的逻辑流程。我添加了命令,但之前忘记了添加它。我知道如何添加回调命令。我需要的是在lf=LoginFrameroot之后检测按钮单击。在调用lf=LoginFrameroot之前,它不允许您单击按钮。在调用root.mainloop之前,框架将不会被设置。您可以建议其他方法吗?@huber.duber:在调用root.mainloop之前,GUI不会发生任何事情。在执行时,tkinter将在用户与各种小部件(如按钮)交互时调用与它们关联的命令。这是大多数GUI程序中常见的逻辑流。有没有理由不在LoginFrame中调用父类的构造函数?例如:ttk.Frame.\uuu init\uu self,parents你是对的。它应该调用父类的构造函数。在LoginFrame中不调用父类的构造函数有什么原因吗?例如:ttk.Frame.\uuu init\uu self,parents你是对的。它应该调用父类的构造函数。