繁体   English   中英

从tkinter返回顶层按钮单击

[英]Returning from tkinter toplevel button click

我有一个tkinter GUI,用户需要在其中对某些系统进行身份验证。 当用户单击RUN时,将弹出身份验证顶级,其中用户输入凭据,单击确定,然后应用程序根据这些凭据创建连接实例。

我遇到的困难是传回该连接实例,并且在成功返回应用程序之前无法继续进行处理。 这是一个极其简化的代码片段,显示了总体布局。

import tkinter as tk

def log_in():
    def click_ok():
        username = usr_entry_var.get()
        password = pwd_entry_var.get()

        # This is the portion that creates a connection instance
        # that I desire to later perform actions against in the
        # form of connection.doStuff()
        # I have just set it to some text here for brevity, as this
        # portion is working fine.
        connection = 'someStuffThatAuthenticates'

        login.destroy()

    login = tk.Toplevel()

    usr_lbl = tk.Label(login, text='Username:')
    usr_lbl.grid(column=0, row=0)

    usr_entry_var = tk.StringVar()
    usr_entry = tk.Entry(login, width=40, textvariable=usr_entry_var)
    usr_entry.grid(column=1, row=0)

    pwd_lbl = tk.Label(login, text='Password:')
    pwd_lbl.grid(column=0, row=1)

    pwd_entry_var = tk.StringVar()
    pwd_entry = tk.Entry(login, width=40, textvariable=pwd_entry_var)
    pwd_entry.grid(column=1, row=1)

    ok_btn = tk.Button(login, text='OK', command=click_ok)
    ok_btn.grid(column=0, columnspan=2, row=2)

def click_run():
    connection = log_in()

    # Here is where I perform actions against the returned connection instance.
    # I am just printing it here for brevity.
    print(str(connection))

root = tk.Tk()

run_btn = tk.Button(root, text='RUN', command=click_run)
run_btn.pack()

root.mainloop()

从上面得到的结果是,当我单击root上的RUN按钮时,将同时弹出登录屏幕上的代码print() s None。 我已经尝试了很多事情来获取代码

A)成功返回connection并且

B)等到它返回后再尝试使用它

我没有列出我微不足道的尝试,而只是将代码简化了一下。 感谢您的任何建议!

解决此问题的正常方法是使用wait_windowwait_windowwait_variable方法。 在目标窗口被销毁之前(典型的是模式对话框),第一个不会返回,而在设置了变量之前, wait_variable将不会返回(与非模式对话框相同)

在程序等待时,它仍然能够处理事件。

effbot.org关于创建对话框的文章非常简洁: http ://effbot.org/tkinterbook/tkinter-dialog-windows.htm

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM