2014-04-01 53 views
1

我正在創建一個小小的tkinter應用程序。它有一個文本字段,現在我加入了菜單如下:Tkinter編輯菜單,macos中的特殊字符選項

def _make_top_bar(self): 
    menubar = Menu(self.parent) 
    filemenu = # File menu definition, not relevant 
    menubar.add_cascade(label="File", menu=filemenu) 

    editmenu = Menu(menubar, tearoff=0) 
    editmenu.add_command(label="Clear", command=self.clear) # It clears the text field 
    menubar.add_cascade(label="Edit", menu=editmenu) 
    root.config(menu=menubar) 

這增加了一個菜單,文件菜單中,我定義的,但在編輯菜單中有兩個額外的選項:開始聽寫和特殊字符(我沒有定義它們)。開始聽寫打開語音識別。特殊字符打開表情符號選擇器。

edit menu

emoji selector

我真的不希望表情符號選擇在我的應用程序特別,因爲它會導致錯誤。如果我雙擊表情符號,我得到一個很長的堆棧跟蹤:

2014-04-01 13:09:28.283 Python[4557:d07] -[NSConcreteMutableAttributedString characterAtIndex:]: unrecognized selector sent to instance 0x7fd83bf55ee0 
2014-04-01 13:09:28.286 Python[4557:d07] (
0 CoreFoundation      0x00007fff8fd8925c __exceptionPreprocess + 172 
1 libobjc.A.dylib      0x00007fff9194ce75 objc_exception_throw + 43 
2 CoreFoundation      0x00007fff8fd8c12d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 
3 CoreFoundation      0x00007fff8fce73f2 ___forwarding___ + 1010 
4 CoreFoundation      0x00007fff8fce6f78 _CF_forwarding_prep_0 + 120 
5 libtk8.6.dylib      0x0000000108fe3b54 -[TKContentView(TKKeyEvent) insertText:] + 244 
6 AppKit        0x00007fff8d1fe767 -[NSTextInputContext insertText:replacementRange:] + 379 
7 AppKit        0x00007fff8d1fda18 -[NSTextInputContext handleTSMEvent:] + 8271 
8 AppKit        0x00007fff8d1fb9a5 _NSTSMEventHandler + 205 
9 HIToolbox       0x00007fff92fd01d4 _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec + 892 
10 HIToolbox       0x00007fff92fcf787 _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec + 385 
11 HIToolbox       0x00007fff92fe3880 SendEventToEventTarget + 40 
... 

我怎樣才能擺脫我的菜單中的「特殊字符」項?

回答

0

我還沒有找到一種方法可以從菜單中刪除項目,但是有一種方法可以避免它們首先出現在菜單中。

與其調用菜單"Edit",不如調用它"Edit "(末尾有空格)。

這將停止從的MacOS添加額外的項目,不看任何不同的用戶:

def _make_top_bar(self): 
    menubar = Menu(self.parent) 
    filemenu = # File menu definition, not relevant 
    menubar.add_cascade(label="File", menu=filemenu) 

    editmenu = Menu(menubar, tearoff=0) 
    editmenu.add_command(label="Clear", command=self.clear) # It clears the text field 
    menubar.add_cascade(label="Edit ", menu=editmenu) 
    root.config(menu=menubar)