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

时间:2013-04-06 15:04:28

标签: tkinter cross-platform tk

我正在使用包含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上,不是在窗口标题前面加上星号,而是在窗口关闭按钮(topleft corner上的红色圆形按钮)上出现一个黑点表示未保存的更改。是否可以从Tkinter(或更一般地说,从Tcl / Tk)访问此功能?

编辑2: 在使用applescript的初步建议后,Kevin Walzer提出了解决方案:设置tkinter的{​​{1}}。以上,相当于使用

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) 中的

1 个答案:

答案 0 :(得分:2)

是的,这可以使用wm_attributes并将“modified”标志设置为true来完成。

示例:

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