PyDev Eclipse中Tkinter代码运行异常:短代码正常长代码无反应
问题分析与解决
你的第二段Tkinter代码之所以没有任何反应,核心原因是缺少了启动主事件循环的关键代码root.mainloop()!
我们来理清楚问题:
- 第一段极简代码能正常运行,是因为它最后调用了
mainloop()——这个方法会让Tkinter窗口保持显示状态,同时处理用户的交互事件; - 第二段代码里你完成了窗口、画布、图形的创建,也用
c.pack()把画布挂载到了窗口上,但程序执行完所有代码后直接退出了,根本没进入事件循环,所以你看不到任何窗口界面。
修正后的可运行代码
from tkinter import Tk, Canvas, HIDDEN, NORMAL root = Tk() root.title('Snap') c = Canvas(root, width=400, height=400) shapes = [] circle = c.create_oval(35, 20, 365, 350, outline='black', fill='black', state=HIDDEN) shapes.append(circle) circle = c.create_oval(35, 20, 365, 350, outline='red', fill='red', state=HIDDEN) shapes.append(circle) circle = c.create_oval(35, 20, 365, 350, outline='green', fill='green', state=HIDDEN) shapes.append(circle) circle = c.create_oval(35, 20, 365, 350, outline='blue', fill='blue', state=NORMAL) shapes.append(circle) c.pack() root.mainloop() # 这行是让窗口显示并持续运行的关键!
补充说明
mainloop()是所有Tkinter GUI程序的必备收尾步骤,它会一直运行直到用户主动关闭窗口。如果没有这行代码,程序完成初始化后会立刻终止,自然看不到任何界面效果。
内容的提问来源于stack exchange,提问作者F.M
相关产品推荐
相关产品推荐

