Я впервые использую 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 () прервала бы mainloop.
EDIT: Если бы кто-то еще запустил скрипт и получил следующую ошибку:
Exception ignored in: <__main__.Display object .!display>
AttributeError: 'Display' object has no attribute 'flush'