2017-05-12 48 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

好的,谢谢你,最后一个迷你问题,是否打破每一个这样的定制绑定是常见的做法?或者只是这些情况 –

相关问题