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

Python Tkinter:如何通过单击Mac上的Dock图标重新打开应用程序?,python,tkinter,Python,Tkinter,我将close按钮与root.draw()绑定,因此应用程序将关闭其窗口而不是退出,但应用程序似乎挂起,无法通过单击Dock图标重新打开 如何绑定方法root.deiconify()来执行此操作 我用pyinstaller打包应用程序 更新: 在运行root.iconify()或root.draw()之后,python tkinter应用程序似乎挂起,因此单击Dock上的图标没有响应。这是测试代码 from Tkinter import * from ScrolledText import Sc

我将close按钮与root.draw()绑定,因此应用程序将关闭其窗口而不是退出,但应用程序似乎挂起,无法通过单击Dock图标重新打开

如何绑定方法root.deiconify()来执行此操作

我用pyinstaller打包应用程序

更新: 在运行root.iconify()或root.draw()之后,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()

如果您使用的是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版本。

如果您使用的是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版本。

最后我从这里找到了解决方案


最后我从这里找到了解决办法


谢谢,我以后会试试的。它确实对我有用。在运行root.draw()或root.iconify()之后,我找不到任何方法通过单击Dock上的图标来响应python tkinter应用程序。通过使用root.createcommand('tk::mac::rebootapplication',root.deiconify)修复了此问题。谢谢,我稍后将尝试此方法。它确实对我有用。在运行root.draw()或root.iconify()后,我找不到任何方法通过单击Dock上的图标来响应python tkinter应用程序。通过使用root.createcommand('tk::mac::rebootApplication',root.deiconify)修复了我的错误,最小化时它处于活动状态,但仍然不知道如何绑定root.deiconify()我错了,最小化时它处于活动状态,但是仍然不知道如何绑定root.deiconify()
root.createcommand('tk::mac::ReopenApplication', root.deiconify)