python Tkinter界面,点击右上角X关闭界面的问题
用python的Tkinter写了一个界面,现在遇到一个问题就是点击界面右上角的X关闭界面时,程序占用的资源有的没有释放掉(比如程序打开了计算机串口,在关闭界面的时候没有关闭掉串口,此时串口资源一直被占用),程序创建的线程也没有结束,这个问题如何解决,我想要全部都结束掉demo代码如下
import tkinter as tk
import threading
import time
win = tk.Tk()
def fun():
i = 0
while True:
print("hello %d"%i)
time.sleep(1)
i = i+1
def callback():
t = threading.Thread(target=fun)
t.start()
bt = tk.Button(win,text = "按钮",command = callback)
bt.pack()
win.mainloop()
当关闭界面以后环境里边还能答应hello。 现在用python写了一个串口上位机,当串口打开的时候,用户关闭了界面,此时串口一直被占用着,别的程序就在用不了这个串口资源了。这时怎么办,和举的线程的例子一样,如何在关闭程序的时候把资源都释放掉
不要沉,求大佬支招 能不能点右上角击关闭X的时候执行一个方法呢,我在方法内释放资源
没有大虾拔刀相助? 加我扣扣: 1706776506教你 你的tkinter不能在idle界面运行,会起冲突的,试试双击打开运行 idle也是tkinter写的,会有冲突,导致程序已经结束运行但是窗口不消失的情况(pygame也有),可以保存文件后直接双击运行或者是用pycharm,可以用tsk强制关闭 想到一个方法,写个类,继承tkinter,重写del方法
import tkinter as tk
class A(tk.Tk):
def __init__(self):
super().__init__()
def __del__(self):
print('aaaaaaaa')
if __name__ == '__main__':
app = A()
app.title('第一个UI程序')
theLabel = tk.Label(app,text='我的第一个窗口程序')
theLabel.pack()
app.mainloop()
但是我试了,在idle中运行不会打印aaaaa,直接运行才会打印aaaaa,至于为什么,楼上已经说了 可以在程序里面加一个退出代码,如果win.quit()不行就win.destroy
页:
[1]