首页 > 解决方案 > 如何在两个线程之间共享数据

问题描述

我正在使用 Tkinter 创建一个应用程序。我有两个线程,第一个是查找结果的算法,第二个是我的 Tkinter 窗口,它显示找到的结果数。

import time
from tkinter import *
from threading import Thread

global results
results = []

class thread(Thread):
    def __init__(self, name):
        Thread.__init__(self)
        self.name = name

    def run(self):
        global results
        if self.name == "algo":
            algo()
        elif self.name == "window":
            window = Tk()
            tmp = StringVar()
            tmp.set(str(len(results)))
            text = Label(window, textvariable=tmp, font=(None, 12))
            text.place(x=10, y=15)
            window.mainloop()

def algo():
    global results
    while True:
        time.sleep(1)
        results += [1]
        print(len(results))

thread_1 = thread("algo")
thread_2 = thread("window")
thread_1.start()
thread_2.start()
thread_1.join()
thread_2.join()

问题是 textvariable 没有更新。

标签: python-3.xmultithreadingtkinter

解决方案


您可以tkinter mainloop在主线程中运行,并且您的函数在特别生成的 new 中运行Thread。似乎没有必要拥有更多:

import time
import tkinter as tk
from threading import Thread

def algo():
    while True:
        time.sleep(1)
        result.set(result.get() + 1)
        print(result.get())

root = tk.Tk()
result = tk.IntVar(value=0)
label = tk.Label(root, textvariable=result)
label.pack()

thread_1 = Thread(target=algo)
thread_1.start()

root.mainloop()

推荐阅读