Tkinter 通过在窗口标题中预加*表示未保存的更改-如何在Mac OS X上的窗口关闭按钮中添加黑点?

Tkinter 通过在窗口标题中预加*表示未保存的更改-如何在Mac OS X上的窗口关闭按钮中添加黑点?,tkinter,cross-platform,tk,Tkinter,Cross Platform,Tk,我正在Tkinter中编写一个文本编辑器,使用一个包含text小部件的TopLevel窗口。当前,当文档/缓冲区包含未保存的更改时,我会在窗口标题前加一个星号,如MyDocument->*MyDocument,这是*nix环境下的惯例。为此,我使用Text的edit\u modified方法如下: 将Tkinter作为tk导入 类编辑窗口(tk.Toplevel): # [...] self.text=tk.text(…) #跟踪文本的修改: self.text.bind(“,self.modi

我正在Tkinter中编写一个文本编辑器,使用一个包含
text
小部件的
TopLevel
窗口。当前,当文档/缓冲区包含未保存的更改时,我会在窗口标题前加一个星号,如
MyDocument
->
*MyDocument
,这是*nix环境下的惯例。为此,我使用
Text
edit\u modified
方法如下:

将Tkinter作为tk导入
类编辑窗口(tk.Toplevel):
# [...]
self.text=tk.text(…)
#跟踪文本的修改:
self.text.bind(“,self.modified)
def已修改(自身,事件=无):
如果self.text.edit_modified():
title=self.title()
如果标题[0]!=“*”:
自身名称(“*”+名称)
其他:
title=self.title()
如果标题[0]=“*”:
self.title(title[1:])
def保存(自我,事件=无):
#[…保存在保存在变量self.filename中的文件名下…]
self.text.edit\u modified(False)
self.title(os.path.basename(self.filename))
我的问题是:在Mac OS X上,窗口关闭按钮(左上角的红色圆形按钮)中会出现一个黑点,表示未保存的更改,而不是在窗口标题前加上星号。是否可以从Tkinter(或者更一般地说,从Tcl/Tk)访问此功能

编辑2: 在最初建议使用applescript之后,Kevin Walzer提出了解决方案:设置
tkinter
wm_属性。如上所述,这相当于使用

self.wm_属性(“-modified”,1)#设置顶层关闭按钮(mac)中的黑点

self.wm_2;attributes(“-modified”,0)#在顶层的关闭按钮(mac)中取消黑点

self.modified

Yes中,可以使用wm_属性并将“modified”标志设置为true来完成此操作

例如:

from Tkinter import *
root= Tk();
Label(root,text='This is the Toplevel').pack(pady=10)
root.wm_attributes("-modified", 1)
root.mainloop()

在我使用mac电脑的这些年里,我从来没有注意到关闭按钮上有一个黑点。什么应用程序能做到这一点?看起来它确实取决于应用程序和OS X版本:TextEdit(mac OS X 10.6.8,但不是OS X 10.7.5?)、Emacs、LibreOffice、MSWord(两个OS X版本)大多数OS X应用程序都使用这个黑点来表示当前文档已更改(例如邮件)。从Lion开始,使用操作系统级版本控制的应用程序不使用它。不知道你是否可以使用tkinter调用操作系统功能,但你希望使用IsWindowModified和SetWindowModified,至少在Carbon上是这样。(只是想知道Lion操作系统如何知道应用程序内部缓冲区的变化?)感谢您指向这些函数。可以通过applescript调用它们吗?(你知道怎么做吗?)!我不知道增加了这个功能。谢谢,凯文。太棒了,效果很好,非常感谢!以前从未遇到过wm_属性,很高兴知道。我已经编辑了原始问题,删除了对applescript的任何引用。