jack_dawson 发表于 2019-5-28 16:43:43

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。

jack_dawson 发表于 2019-5-28 16:56:39

现在用python写了一个串口上位机,当串口打开的时候,用户关闭了界面,此时串口一直被占用着,别的程序就在用不了这个串口资源了。这时怎么办,和举的线程的例子一样,如何在关闭程序的时候把资源都释放掉

jack_dawson 发表于 2019-5-28 21:31:36

不要沉,求大佬支招

jack_dawson 发表于 2019-5-28 22:01:58

能不能点右上角击关闭X的时候执行一个方法呢,我在方法内释放资源

jack_dawson 发表于 2019-5-29 08:35:18

没有大虾拔刀相助?

hackfish 发表于 2020-4-7 00:15:24

加我扣扣: 1706776506教你

溪水叮咚 发表于 2020-4-7 07:42:27

你的tkinter不能在idle界面运行,会起冲突的,试试双击打开运行

老八秘制 发表于 2020-4-7 08:45:35

idle也是tkinter写的,会有冲突,导致程序已经结束运行但是窗口不消失的情况(pygame也有),可以保存文件后直接双击运行或者是用pycharm,可以用tsk强制关闭

snaker 发表于 2020-4-11 09:46:32

想到一个方法,写个类,继承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,至于为什么,楼上已经说了

老八秘制 发表于 2020-4-11 09:53:08

可以在程序里面加一个退出代码,如果win.quit()不行就win.destroy
页: [1]
查看完整版本: python Tkinter界面,点击右上角X关闭界面的问题