【发布时间】:2018-02-03 10:47:34
【问题描述】:
我编写了一个包含 tkinter 的 python 脚本(名为 script2.py)。为了方便,我在底部写了一个函数。它看起来像:
import tkinter
import pygubu
class GuiApp2:
def __init__(self,master):
self.builder=pygubu.Builder()
self.builder.add_from_file('test.ui')
self.builder.get_object('Frame_main',master)
self.list_box_a=self.builder.get_object('Listbox_a')
self.lba_value_set=tkinter.StringVar()
self.list_box_a['listvariable']=self.lba_value_set
def set_value_set(self,the_value_set):
self.lba_value_set.set(the_value_set)
def run(the_value_set):
master=tkinter.Tk()
app=GuiApp1(master)
app.set_value_set(the_value_set)
master.mainloop()
def main():
run(['1','2','3'])
if __name__ == '__main__':
main()
然后我编写了另一个脚本(名为 script1.py),它调用上面脚本底部的函数。它是:
import tkinter
import pygubu
import script2
class GuiApp1:
def __init__(self,master):
self.builder=pygubu.Builder()
self.builder.add_from_file('mainapp.ui')
self.builder.get_object('Frame_main',master)
self.button_show=self.builder.get_object('Button_show')
self.button_show['command']=self.command_for_button_show
def command_for_button_show(self):
script2.run(['1','2','3'])
def main():
master=tkinter.Tk()
app=GuiApp1(master)
master.mainloop()
if __name__ == '__main__':
main()
当我运行 script2.py 时,一切都很好。但是当我运行导入 script2.py 的 script1.py 时,script2.py 中的列表框是空的。
当然,这两个脚本不是我在项目中使用的文件。我真正使用的文件太长,难以阅读。
为了找出问题所在,我在脚本中插入了几个print 函数来显示脚本中变量的值。最后,除了Listbox,所有的打印结果都很好。
因此我将真正的脚本简化为这些易于阅读的脚本。
我猜可能 script1.py 中的 master(tkinter.Tk()) 会影响 script2.py 中的 master。因为tkinter中GUI管理的逻辑和dotNet中的不同。
有没有人遇到过类似的问题或对此有所了解?
【问题讨论】:
-
你能提供截图吗?不是每个人都一定有
pygubu。
标签: python user-interface tkinter listbox tcl