0

我正在使用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.

4

1 回答 1

2

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

例子:

from Tkinter import *
root= Tk();
Label(root,text='This is the Toplevel').pack(pady=10)
root.wm_attributes("-modified", 1)
root.mainloop()
于 2013-05-11T03:26:01.720 回答