Python Tkinter:如何通过单击Mac上的Dock图标重新打开应用程序?

时间:2016-08-12 17:26:42

标签: python tkinter

我将关闭按钮与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()

2 个答案:

答案 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)