我将关闭按钮与root.withdraw()绑定,因此应用程序将关闭其窗口而不是退出,但似乎应用程序挂起,并且无法通过单击Dock图标重新打开
如何绑定方法root.deiconify()来执行此操作?
我使用pyinstaller打包应用程序
更新: 运行root.iconify()或root.withdraw()后,python tkinter应用程序似乎挂起,因此单击Dock上的图标没有响应。这是测试代码
from Tkinter import *
from ScrolledText import ScrolledText
import threading, time, os
def printnumber(output):
n = 1
while 1:
output.insert(END, '%s\n'%str(n))
output.see(END)
n += 1
time.sleep(1)
def runing(output):
output.insert(END, 'Start\n')
output.see(END)
threading.Thread(target=printnumber, args=(output, )).start()
root = Tk()
text_output = ScrolledText(root, undo=1, highlightthickness=0, font='system', )
text_output.pack()
Button(root, text='Start', command=runing(text_output)).pack()
root.protocol('WM_DELETE_WINDOW', lambda :root.iconify())
os.system('''/usr/bin/osascript -e 'tell app "System Events" to set frontmost of every process whose unix id is %s to true' '''%os.getpid())
root.mainloop()
答案 0 :(得分:1)
如果您使用的是OS X 10.9或更高版本以及python.org 64位/ 32位安装程序中的Python,则由于Tk问题,应用程序窗口可能无法正确更新。如果可能,请安装最新的ActiveTcl 8.5.18.0。 (此外,从3.4.0,3.3.3和2.7.6安装程序开始,修复了在交互使用时可能导致Python崩溃的关键OS X 10.9问题。)
有一整节讨论Tk / IDLE的不同问题,具体取决于您使用的OS X版本。
答案 1 :(得分:0)
最后,我从http://www.tkdocs.com/tutorial/menus.html
找到了解决方案root.createcommand('tk::mac::ReopenApplication', root.deiconify)