python 如何远程关闭 tkinter窗口以及关闭子线程的tkinter窗口,给出详细代码
时间: 2023-07-13 11:19:07 浏览: 94
Python实现定时自动关闭的tkinter窗口方法
要远程关闭 tkinter 窗口和关闭子线程的 tkinter 窗口,可以使用以下代码实现:
```python
import tkinter as tk
import threading
import socket
# 创建主窗口
root = tk.Tk()
# 创建子窗口
def create_child_window():
child_window = tk.Toplevel(root)
child_window.title('子窗口')
# 子线程
def child_thread():
while True:
data = conn.recv(1024).decode('utf-8')
if data == 'close':
child_window.destroy()
break
# 创建子线程并启动
t = threading.Thread(target=child_thread)
t.start()
# 创建按钮并绑定事件
btn_create = tk.Button(root, text='创建子窗口', command=create_child_window)
btn_create.pack()
# 远程关闭窗口
def remote_close():
conn.send('close'.encode('utf-8'))
root.destroy()
# 创建 socket 服务器
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 8888))
sock.listen(1)
# 接收客户端连接并启动服务
conn, addr = sock.accept()
print('连接成功:', addr)
# 创建远程关闭按钮并绑定事件
btn_close = tk.Button(root, text='远程关闭', command=remote_close)
btn_close.pack()
# 运行主窗口
root.mainloop()
```
在上述代码中,我们创建了一个主窗口和一个子窗口,并为主窗口添加了一个按钮用于创建子窗口。当我们点击按钮时,会创建一个新的子窗口,并在子窗口中启动一个子线程用于接收远程关闭命令。
我们还创建了一个 socket 服务器,用于接收客户端连接并启动服务。当客户端发送 `close` 命令时,我们会调用 `destroy()` 方法关闭子窗口,并在主窗口中添加一个按钮用于远程关闭。当我们点击远程关闭按钮时,会向客户端发送 `close` 命令,并调用 `root.destroy()` 方法关闭主窗口。
注意,我们要在主线程中启动 tkinter,否则会出现一些奇怪的问题。另外,为了避免网络超时等问题,建议将 socket 通信放在子线程中处理。
阅读全文