我第一次使用tkinter,并且创建了一个窗口,该窗口具有一个列表框,其中包含用户可以选择的值。这些值将传递到函数中,并且任何控制台输出都将显示在窗口的文本框中。
这是我的代码:
class Display(tk.Frame):
def __init__(self,parent=0):
tk.Frame.__init__(self,parent)
# code here that creates a bunch of widgets
sys.stdout = self
# code here that packs widgets into frame
def onSubmit(self):
self.years = list()
self.selection = self.lstbox.curselection()
for i in self.selection:
entry = self.lstbox.get(i)
self.years.append(int(entry))
batch_process(self.years)
def write(self, txt):
self.output.insert(tk.END,str(txt))
self.output.see(tk.END)
self.update_idletasks()
class MainW(tk.Tk):
def __init__(self, parent):
tk.Tk.__init__(self ,parent)
self.parent = parent
self.display = Display(self)
self.display.pack()
self.title('Test')
self.protocol('WM_DELETE_WINDOW', self.close_window)
def close_window(self):
if messagebox.askokcancel('Exit', 'Are you sure you want to close?'):
self.destroy()
if __name__=='__main__':
window = MainW(None)
window.mainloop()
窗口运行良好-列表框成功将值传递到函数中,输出显示在文本框中。
但是,当我单击“ X”并关闭窗口时,控制台显示脚本由于某种原因仍在运行。然后,我必须完全关闭Spyder才能再次运行脚本。怎么了我的理解是destroy()将终止主循环。
编辑:如果其他人运行了脚本并出现以下错误:
Exception ignored in: <__main__.Display object .!display>
AttributeError: 'Display' object has no attribute 'flush'
答案 0 :(得分:0)
我明白了...即使我不太了解。我必须在“显示”类中添加“刷新”功能。
def flush(self):
pass