我正在使用包含Text
小部件的TopLevel
窗口编写Tkinter中的文本编辑器。目前,当文档/缓冲区包含未保存的更改时,我按照在* nix环境下惯例的惯例在MyDocument
- >*MyDocument
之前加上带星号的窗口标题。为此,我使用的Text
的edit_modified
方法如下:在窗口标题中预先标记*表示未保存的更改 - 如何在Mac OS X上的窗口关闭按钮中添加黑点?
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的,凯文·沃尔泽想出了解决办法:设置tkinter
的wm_attributes
。以上,这相当于在self.modified
使用
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)
。
在我多年使用Mac的我从来没有注意到的关闭按钮的黑点。什么应用程序呢? – 2013-04-06 15:54:30
嗯,它似乎确实取决于应用程序和OS X版本:TextEdit(mac os x 10.6.8,但不是os x 10.7.5?),Emacs,LibreOffice,MSWord(都是os x版本) – 2013-04-06 16:31:21
大多数操作系统X应用程序使用此黑点表示当前文档已更改(Mail是一个示例)。从Lion开始,它不会被使用操作系统级版本控制的应用程序使用。 – 2013-04-07 16:11:13