繁体   English   中英

Python TkInter绑定中断

[英]Python TkInter bind breaking

我有一个使用键绑定的简单GUI-像这样。

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()引起的。 我不明白的是为什么会发生这种情况以及如何解决它。

该代码对我有用:

import Tkinter, tkFileDialog

class Foo(object):
    def __init__(self, master):
        master.bind('<KeyPress-3>', self.do_bar)
        master.bind('<KeyPress-9>', self.load_new_config)

        self.load_config()

        if not self.conf:
            master.after(1, self.load_new_config)
        else:
            self.load_data()

    def load_config(self):
        try:
            self.conf = None#get stuff from known file
        except FailedToGetStuff:
            self.conf = None

    def load_new_config(self, e = 0):
        path = tkFileDialog.askopenfilename(initialdir='~')
        self.conf = None#get stuff from file in path
        self.load_data()

    def load_data(self, e = 0):
        pass
        #get data from self.conf, process and display

    def do_bar(self, e = 0):
        print 1
        #do stuff with displayed data

if __name__ == "__main__":
    root = Tkinter.Tk()
    Foo(root)
    root.mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM