Как обновить GUI из процесса с использованием IPC - PullRequest
0 голосов
/ 24 марта 2020

У меня запущено несколько процессов, которые время от времени будут пытаться изменить цвет кнопки tkinter. Я был в этом в течение дня и не могу найти решение. Как я могу сделать это, используя IP C?

1 Ответ

1 голос
/ 24 марта 2020

Вы можете использовать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...