gpt4 book ai didi

python - 应用程序在 deiconify()、Tkinter 之后挂起

转载 作者:太空宇宙 更新时间:2023-11-03 19:10:29 29 4
gpt4 key购买 nike

我正在尝试使用 Tkinter 中的withdraw()/deiconify() 来隐藏/显示我的应用程序,但是在 deiconify() 方法调用之后我的应用程序挂起。在Win7上运行此代码。我做错了什么?

import Tkinter as tk
import threading


class MyApp(object):
def __init__(self, parent):
self.root = parent
self.root.geometry('400x300')
self.root.title('My Application')

btn = tk.Button(parent, text='Hide', command=self.onClick)
btn.pack()

def onClick(self):
self.hide()
self.t = threading.Timer(3, self.show)
self.t.start()

def hide(self):
print 'hide()'
print 'state: ', self.root.state()
print 'withdraw()'
self.root.withdraw()
print 'state: ', self.root.state()

def show(self):
print 'show()'
print 'state: ', self.root.state()
print 'deiconify()'
self.root.deiconify()
print 'state: ', self.root.state()
print 'show end'

if __name__ == '__main__':
root = tk.Tk()
app = MyApp(root)
root.mainloop()

UPD:有一个工作示例:

import Tkinter as tk
import sched
import time


class MyApp(object):
def __init__(self, parent):
self.root = parent
self.root.geometry('400x300')

btn = tk.Button(parent, text='Hide', command=self.onClick)
btn.pack()

self.scheduler = sched.scheduler(time.time, time.sleep)

def onClick(self):
self.hide()
self.scheduler.enter(3, 1, self.show, ())
self.scheduler.run()

def hide(self):
self.root.withdraw()

def show(self):
self.root.deiconify()

if __name__ == '__main__':
root = tk.Tk()
app = MyApp(root)
root.mainloop()

最佳答案

Tkinter 不是线程安全的,您正在从线程调用 self.root.deiconify()。这很可能是您问题的根源。您必须重新构建您的解决方案,以使线程使用线程安全队列来请求主循环调用 Tkinter。

在不使用线程的情况下,您可以使用 Tkinter 做很多事情。您确定需要它们吗?

关于python - 应用程序在 deiconify()、Tkinter 之后挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13119695/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com