2017-05-12 73 views
0

我正在製作一個tkinter程序,並且由於某種原因[我有一個綁定到control-O的函數],當我使用它時,它會創建一個新行。下面是函數:我的功能在tkinter中創建了一個新行,不知道爲什麼

def fileOpen(textView): 
    try: 
     global currentText 
     global currentName 
     global currentTempName 
     myfile = tkFileDialog.askopenfile(title='Open a file', mode='r') 
     text.delete('1.0', END) 
     loadedfile = myfile.read() 
     currentText = loadedfile 
     currentFile = myfile.name 
     currentName = currentFile 
     currentName = currentName.rsplit('/', 1)[-1] #get the 'name.ext' part only 
     currentName = currentName.rsplit('\\', 1)[-1] #incase you're usin windows 
     currentTempName = currentName 
     currentFileButton.config(text = currentName) 
     myfile.close() 
     textView.insert("end", loadedfile) 
    except: 
     return 

這裏是它的綁定:

def ctrlO(arg): 
    fileOpen(text) 

和實際的結合:

root.bind("<Control-o>", ctrlO) 

[我使用的是文本組件,並結合它doesn解決問題]

爲了更好地解釋這個問題,當我按下ctrl + o來打開openfile對話框時,它會創建這是一條新的路線,就好像我按下「Enter」鍵,但只在文件末尾。如果需要,我可以提供更多的代碼,但這些是唯一使用的地方。

感謝

(我認識到,功能雜亂)

編輯:這並不影響節目,因爲我清楚開口之間的文本,但它只是有點討厭,我肯定很容易解決。

回答

1

這是Control-O在Text小部件中的正常行爲;即使你根本沒有你的密鑰綁定,它也會發生。要覆蓋它,您需要在事件處理程序中使用return "break",以防止事件進一步傳播。我很肯定你必須直接綁定到Text部件才能在內置行爲之前激活它。您仍然可能需要在根窗口小部件上進行綁定,以便即使用戶從未在文本字段中單擊以使其獲得鍵盤焦點,該命令也能正常工作。

+0

謝謝,它的工作。我改變了綁定到根,因爲沒有像你說的那樣處理文本,並且返回'break'起作用。是否有所有綁定的預製行爲列表?非常感謝! –

+0

我能找到的唯一完整的鍵綁定列表位於https://www.tcl.tk/man/tcl8.4/TkCmd/text.htm底部附近 - 請注意,這是爲底層Tk環境編寫的,而不是Tkinter包裝。 – jasonharper

+0

好的,謝謝你,最後一個迷你問題,是否打破每一個這樣的定製綁定是常見的做法?或者只是這些情況 –

相關問題