tkinter 退出时关闭串行连接

Posted

技术标签:

【中文标题】tkinter 退出时关闭串行连接【英文标题】:Close the serial connection when tkinter exits 【发布时间】:2021-04-21 23:16:26 【问题描述】:

我已经使用 arduino 初始化了一个串行连接,使用

ser = serial.Serial(port = COMPort, baudrate=9600, timeout=0.1)

但是,当我关闭应用程序时,与连接关联的 LED 在 arduino 上保持打开状态。这意味着串行连接仍然处于活动状态。

当我退出应用程序时,如何自动关闭串行连接?

【问题讨论】:

可以在tkinter mainloop()之后调用close函数。 谢谢你们。对不起酷云,我之前很忙。 【参考方案1】:

AFAIK有两种方法可以实现这一点,一种是将代码放在mainloop()下面(正如acw1668已经提到的),另一种是使用wm_protocol

方法一: 只要窗口还活着,mainloop() 之后的任何代码都会停止,因此将代码放在mainloop() 之后会在窗口关闭后执行。

root.mainloop()

ser.close()

方法二: 当您尝试“删除”或关闭窗口时会触发此协议。所以你可以绑定一个函数到 this 并要求它关闭窗口,然后像这样关闭连接:

def close():
    root.destroy() # Close the window
    ser.close() # Then the connection

root.wm_protocol('WM_DELETE_WINDOW',close) # Assuming root = Tk()

【讨论】:

以上是关于tkinter 退出时关闭串行连接的主要内容,如果未能解决你的问题,请参考以下文章

关闭我的 tkinter 串行应用程序,给了我一个例外

在 Tkinter 文本框中显示从串行端口读取的数据时,发出处理数据

Tkinter python 退出/退出崩溃

结合 Tkinter 和 win32ui 使 Python 在退出时崩溃

每当有来自串行端口 python 3.x 的新数据时,从串行数据更新 tkinter 标签

从函数设置串行对象(从 tkinter 交互调用)