2013-04-06 64 views
0

我正在使用包含Text小部件的TopLevel窗口编写Tkinter中的文本编辑器。目前,当文档/缓冲区包含未保存的更改时,我按照在* nix环境下惯例的惯例在MyDocument - >*MyDocument之前加上带星号的窗口标题。为此,我使用的Textedit_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的,凯文·沃尔泽想出了解决办法:设置tkinterwm_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) 

+0

在我多年使用Mac的我从来没有注意到的关闭按钮的黑点。什么应用程序呢? – 2013-04-06 15:54:30

+0

嗯,它似乎确实取决于应用程序和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

+0

大多数操作系统X应用程序使用此黑点表示当前文档已更改(Mail是一个示例)。从Lion开始,它不会被使用操作系统级版本控制的应用程序使用。 – 2013-04-07 16:11:13

回答

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() 
+0

整洁!我不知道该功能已添加。谢谢,凯文。 – 2013-05-11 11:26:18

+0

太棒了,完美的作品,非常感谢!以前从未遇到过wm_attributes,很高兴知道。我编辑了原始问题以删除对applescript的任何引用。 – 2013-05-13 13:13:21

相关问题