如何使用多进程在无限循环中更新全局变量

How to update global variable in infinite loop using multiprocess

我有以下简单的代码。只有一个按钮和一个条目小部件。

当我单击按钮时,changeText 读取 entry_widget 值并分配给 'var'。 mainWindow 和 InfiniteLoop 是 运行 同时。但在 InfiniteLoop 中变量 var 的值不会改变。如何改变它的价值?

import tkinter as Tk
from multiprocessing import Manager, Process
import time
var = 'Unchanged'

root = Tk.Tk()
root.geometry('740x306')
root.title("Performance")

id_label = Tk.Label(master=root, text="Id: ")
id_label.pack()

entry_widget = Tk.Entry(master=root, font=30)
entry_widget.pack()

def changeText():
  global var
  var = entry_widget.get() #var is changed here. example var's value is: a
  print_var() # var = a and printing a. 
def print_var():
  print(var) # var's value is a and its working here.

def aaa():
  id_label.config(font=30)
  id_label.place(x=10, y=5)
  entry_widget.place(x=33, y=5)


  sumbit_button = Tk.Button(master=root, text='Sumbit', command=changeText)
  sumbit_button.pack()
  sumbit_button.place(x=250, y=2)
  Tk.mainloop()

def forLoop():
  while True:
    time.sleep(0.1)
    print_var() #doesn't work here. print Unchanged

if __name__ == '__main__':
    p1 = Process(target=aaa)
    p1.start()
    p2 = Process(target=forLoop)
    p2.start()
    p1.join()
    p2.join()

您需要调用 changeText 方法来更新值。如果您想在 InfiniteLoop 中执行此操作;

#Button's command
  def changeText():
    global var
    var = entry_widget.get()
    return var

def InfiniteLoop():
  var = changeText()
  while True:
    print(var)