Python 从SharedTypes数组中设置Tkinter标签文本

Python 从SharedTypes数组中设置Tkinter标签文本,python,arrays,tkinter,python-multiprocessing,Python,Arrays,Tkinter,Python Multiprocessing,好的,我有一些多进程代码,我试着在我的程序中监视一些数组的值。我做了一些研究,但仍然没有找到任何解决方案这里是我的代码 from tkinter import * from tkinter.ttk import * import multiprocessing as mp from multiprocessing.sharedctypes import Array import time class Form: def __init__(self, timer):

好的,我有一些多进程代码,我试着在我的程序中监视一些数组的值。我做了一些研究,但仍然没有找到任何解决方案这里是我的代码

from tkinter import *
from tkinter.ttk import *
import multiprocessing as mp
from multiprocessing.sharedctypes import Array
import time

class Form:
    def __init__(self, timer):  
        window = Tk()
        window.wm_title('Multiprocess Monitor')

        tvar = StringVar()
        tvar.set(timer)

        ArrayStat = Label(window, textvariable = tvar)

        window.loop()

def Countdown(timer):
    while True:
        for i,v in enumerate(timer):
            timer[i] = v-1
        time.sleep(1)

if __name__ == '__main__':
    timer = Array('i',[-1,-1,-1,-1])
    Ptimer = mp.Process(target = Countdown, args=(timer,))
    Ptimer.daemon = True
    Ptimer.start()

    app = Form(timer)

    Ptimer.join()
打印SharedTypes数组的常规方法是打印(计时器[:])。但是如果在tvar=>tvar.set(timer[:])中使用这种方式,我的GUI不会更新标签中的文本。如果我使用tvar.set(计时器),标签将显示是否有任何可能的解决方案?谢谢

from tkinter import *
from tkinter.ttk import *
import multiprocessing as mp
from multiprocessing.sharedctypes import Array
import time

class Form(Tk):
    def __init__(self):
        Tk.__init__(self)
        self.title('Multiprocess Monitor')
        self.ArrayStat = Label(self, text="test")
        self.ArrayStat.pack()

        self.after(10, self.update_label)

    def update_label(self):
        self.ArrayStat.configure(text=timer[:])
        self.after(10, self.update_label)

def Countdown(timer):
    while True:
        for i,v in enumerate(timer):
            timer[i] = v-1
        time.sleep(1)

if __name__ == '__main__':
    app = Form()
    timer = Array('i',[-1,-1,-1,-1])
    Ptimer = mp.Process(target = Countdown, args=(timer,))
    Ptimer.daemon = True
    Ptimer.start()

    app.mainloop()

    Ptimer.join()
您发布的代码甚至不会运行,未声明的变量等。 您也没有打包/网格化/放置标签,因此不会出现任何内容。 由于tkinter窗口不能序列化以在进程之间传递,因此不能直接调用标签更新,但是
after
循环可以继续检查两个进程之间共享的计时器变量的值。
在构造函数中调用
mainloop
也是一种不好的做法,因此我将它移出了
if\uuu name\uu=='\uuu main\uu'
块。

帮助……….哇,感谢您的回答、解释和更正。在我的问题中,我复制粘贴了我真实代码的某些部分,并将其放在这里,但我忘记了一些细节。。我从来不知道“configure”和“after”这两种语法应该搜索什么关键字?您可以传递给configure的参数会因使用的小部件而异,但通常在创建小部件时传递的任何参数(父小部件除外)可以传递到
configure
函数,以便在创建小部件后进行更改。如需了解更多信息,请参阅此处: