我有一個簡單的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