如何使用多进程在无限循环中更新全局变量
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)
我有以下简单的代码。只有一个按钮和一个条目小部件。
当我单击按钮时,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)