我正在使用TopLevel
包含Text
小部件的窗口在 Tkinter 中编写文本编辑器。目前,当文档/缓冲区包含未保存的更改时,我会在窗口标题前加上星号,如MyDocument
-> *MyDocument
,这在 *nix 环境下是惯用的。为此,我使用如下edit_modified
方法:Text
import Tkinter as tk
class EditingWindow(tk.Toplevel):
# [...]
self.text = tk.Text(...)
# track modifications of the text:
self.text.bind("<<Modified>>", self.modified)
def modified(self, event=None):
if self.text.edit_modified():
title=self.title()
if title[0] != '*':
self.title("*" + title)
else:
title=self.title()
if title[0] == '*':
self.title(title[1:])
def save(self, event=None):
# [... saving under a filename kept in the variable self.filename ...]
self.text.edit_modified(False)
self.title(os.path.basename(self.filename))
我的问题是:在 Mac OS X 上,不是在窗口标题前加上星号,而是在窗口关闭按钮(左上角的红色圆形按钮)中出现一个黑点,表示未保存的更改。是否可以从 Tkinter(或更一般地说,从 Tcl/Tk)访问此功能?
编辑 2:
在最初建议使用 applescript 之后,Kevin Walzer 提出了解决方案:设置tkinter
's wm_attributes
. 以上,相当于使用
self.wm_attributes("-modified", 1) # sets black dot in toplevel's close button (mac)
和
self.wm_attributes("-modified", 0) # unsets black dot in toplevel's close button (mac)
在self.modified
.