【问题标题】:Tkinter: Passing text entries as argument of a function called when pressing a buttonTkinter:将文本条目作为按下按钮时调用的函数的参数传递
【发布时间】:2021-01-13 11:46:30
【问题描述】:

如果问题看起来微不足道,我是 Tkinter 的新手,非常抱歉。我开发了一个 selenium 应用程序,现在我正试图让它与 Tkinter 交互。 我在将文本条目作为函数的输入传递时遇到了一些问题:

我定义了登录功能,已经测试过,可以正常使用:

    def SelfsignIn(user,passw):
        browser = webdriver.Firefox(executable_path='C:\Program Files (x86)\geckodriver.exe') (You can find the entire code at the end)
    ....

然后我正在创建应该将用户输入的用户名和密码作为 SelfsignIn 函数的参数的 GUI:

经过一番研究,我想出了这个方法:

    window = tk.Tk()
    window.title("Login Window")
    greeting = tk.Label(text="Welcome")
    greeting.pack()
    username = tk.Label(text="Username")
    username_entry = tk.Entry()
    password = tk.Label(text="Password")
    password_entry = tk.Entry()
    username.pack()
    username_entry.pack()
    password.pack()
    password_entry.pack()
    par1 = str(username_entry.get())
    par2 = str(password_entry.get())
    button = tk.Button(window, text='Log in', width=25,command=lambda: SelfsignIn(par1,par2))
    button.pack()
    window.mainloop()

该函数被正确调用,实际上网页打开并执行所有操作,直到需要使用凭据为止。此时,登录文本框未填充 GUI 中给出的输入。

我做错了什么?请随时给我任何建议,在此先感谢。

【问题讨论】:

  • 能否提供完整的 SelfSignIn 功能?
  • @Bowolf,感谢您的关注。我在想这无关紧要。我在问题的末尾添加了它

标签: python user-interface tkinter


【解决方案1】:

您在创建条目小部件大约一毫秒后调用username_entry.get()。用户甚至不会看到这个小部件,更不用说有时间输入了。

不要使用lambda - 调用适当的函数,并让函数在需要时而不是之前获取数据。这将使您的代码更易于编写、更易于理解和更易于维护。

def signin():
    par1 = str(username_entry.get())
    par2 = str(password_entry.get())
    SelfsignIn(par1, par2)
...
button = tk.Button(window, text='Log in', width=25,command=signin)

【讨论】:

    【解决方案2】:

    你的错误是,你在 GUI 显示之前就取出了字段的值,所以自然而然两个字符串 par1 和 par2 将是空的。

    当您按下按钮时,您必须获取条目中的值。

    【讨论】:

      猜你喜欢
      • 2021-01-20
      • 2022-11-05
      • 2011-01-18
      • 1970-01-01
      • 2023-02-07
      • 2015-02-28
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多