首页 > 解决方案 > 如何使用 Tkinter 使两个不同的事件触发相同的操作?

问题描述

作为一名 Python 初学者,我一直在尝试编写一个简单的登录模块,我编写的其他 Python 程序可以使用它来限制谁可以打开该程序。我只是为了学习而不是实际使用它而写这个,但我需要一些帮助。

我的问题是,一旦输入凭据,我只能让我的 Enter 键或我的 Mouse-One 触发“登录”功能。我有点难以弄清楚如何让 Enter 和 Mouse click 都有效事件来触发该功能。

这是我到目前为止所拥有的。目前只有 Enter 键会触发“登录”:

from tkinter import *


def mainlogin():

    # Root
    root = Tk()
    root.title("Login")
    root.geometry("240x110")
    root.protocol("WM_DELETE_WINDOW", disable_event)

    # Globals
    global allow_entry
    allow_entry = False

    # Login Credentials 
    my_username = 'abcd'
    my_password = '1234'

    # Login Function

    def login(event):
        if my_username == username.get() and my_password == pswd.get():
            allow_entry = True
            root.quit()
        else:
            allow_entry = False
            wrong_input = Label(root, text="Wrong username or password!")
            wrong_input.pack(padx=5, pady=5)

    # Enter Key Bind
    root.bind("<Return>", login)

    # Login entry widgets
    username = Entry(root)
    username.pack(padx=5, pady=5)
    pswd = Entry(root, show="*")
    pswd.pack(padx=5, pady=5)

    # Buttons

    login_button = Button(root, text="Login", command=login)
    login_button.pack()

    ### MAIN LOOP ###
    root.mainloop()


def quit_login():
    allow_entry = False
    root.quit()


def disable_event():
    pass

### NAME == MAIN ###

if __name__ == "__main__":
    mainlogin()

标签: pythontkinter

解决方案


您可以为鼠标按钮事件设置默认参数:

    def login(event=None):
       if not event: 
           print('>> Button')
       else:
           print('>> Return')
       ......

推荐阅读