python - 如何使用 IPC 从 Process 更新 GUI
问题描述
我有一些进程正在运行,它们时不时会尝试更改 tkinter 按钮的颜色。我已经在这里待了大约一天,但无法提出解决方案。如何使用 IPC 做到这一点?
解决方案
您可以mulitprocessing.Queue
用作桥梁,将按钮的颜色从一个进程转移到另一个进程:
import tkinter as tk
import multiprocessing as mp
import time
from itertools import cycle
def msgs(q):
''' process to send button color to main process periodically '''
colors = cycle(('red', 'green', 'blue', 'cyan', 'orange'))
while True:
q.put(next(colors))
time.sleep(3)
def check(q):
''' get color from queue and set button background to that color '''
try:
color = q.get(False)
btn.config(bg=color)
except:
# queue is empty
pass
btn.after(1000, check, q)
if __name__ == '__main__':
root = tk.Tk()
root.geometry('400x200')
btn = tk.Button(root, text='Hello')
btn.pack()
queue = mp.Queue() # create the shared queue
proc = mp.Process(target=msgs, args=(queue,), daemon=True)
proc.start()
check(queue)
root.mainloop()
推荐阅读
- java - 在 do-while 循环中的 Java try-catch
- graphql - 在没有变量的情况下更新 Apollo 缓存
- python - 删除 PyQt5 QWidget 上的边框
- c++ - CMake - 更改共享库链接选项
- apache-kafka - 如何一次将数据发送给多个 Kafka 生产者
- python - Django根据另一个没有指定关系的表过滤查询集
- python - 需要删除单个字符和数字python
- python - 子进程正在等待密码。并且标准输入无法推送密码
- package - 带有自定义包的“read”上的Common Lisp“case”
- c++ - 如何在c ++ unordered_set中打印给定桶号的所有元素?