丢失一次并且整个应用程序挂起后,simpledialog.askstring()不会重新获得焦点

时间:2018-03-12 13:37:56

标签: python-3.x tkinter python-multithreading

我基本上是在设计一个应用程序,在启动时弹出一个对话框。它要求用户名。从终端启动应用程序时,将打开一个主窗口,然后弹出一个对话框。但有时它会正确聚焦,我能够输入用户名,有时它无法获得焦点。然后问题就开始了。点击它后对话框没有重新获得焦点,整个应用程序都没有响应。只留下一种方法来关闭它,就是杀死它。

知道为什么这个问题会随机发生吗?打开应用程序并正确聚焦后,我可以移动鼠标指针并单击我喜欢的位置,如果单击对话框,则重新获得焦点。 image显示对话框中的红色退出按钮是聚焦的,但我既不能输入任何内容也不能关闭对话框。

#! /usr/bin/env python3

from tkinter import *
from tkinter import simpledialog
import threading


class GUI(object):
    def __init__(self, master):
        self.master = master

    def prompt_username(self):
        username = simpledialog.askstring("User informatiion", "Enter user name:")
        if username:
            print(f"User name: {username}")
        else:
            print("no user name provided")

def connection_thread(*args):
    # some other networking stuffs
    gui = GUI(root)
    gui.prompt_username()

root = Tk()
root.geometry("500x400")
threading._start_new_thread(connection_thread, ('',))
root.mainloop()
print("Pogram exited")

我无法在之前准备的示例代码中重现该问题。最后我添加了另一个示例,可以使用此代码重现问题。

0 个答案:

没有答案