我有一个简单的GUI使用键绑定 - 这样的事情。Python TkInter绑定破解
import Tkinter, tkFileDialog
class Foo(object):
def __init__(self, master):
master.bind('3', self.do_bar)
master.bind('9', self.load_new_config)
self.load_config()
if not self.conf:
self.load_new_config()
else:
self.load_data()
def load_config(self):
try:
self.conf = #get stuff from known file
except FailedToGetStuff:
self.conf = None
def load_new_config(self):
path = askopenfilename(initialdir='~')
self.conf = #get stuff from file in path
self.load_data()
def load_data(self):
#get data from self.conf, process and display
def do_bar(self):
#do stuff with displayed data
if __name__ == "__main__"
root = Tk()
Foo(root)
root.mainloop()
现在,当load_config()找到它正在查找的内容时,它工作得很好。我可以使用绑定,甚至在使用'9'并加载新配置后,一切正常。
问题是,如果load_config()失败,self.conf被设置为None,并且从__init__
调用load_new_conf,则绑定不再可用。
我发现问题是由__init__
内调用tkFileDialog.askopenfilename()引起的。我不明白的是为什么会发生这种情况,以及如何解决这个问题。
您已经验证根eindow具有焦点时绑定停止工作?这可能只是因为你的应用失去了重点。 –
在'__init__'结尾处使用'master.focus_set()'强制关注根目录并不能解决问题。 – Deutherius
试试这个:'foo = Foo(root)' – User