python从tkinter小部件设置全局变量

Posted

技术标签:

【中文标题】python从tkinter小部件设置全局变量【英文标题】:python set global variable from tkinter widget 【发布时间】:2021-12-29 14:48:06 【问题描述】:

我在玩 tkinter 和 multiprocessing 包和全局变量。按下按钮时无法设置变量。当它被释放时,它的值不会保留,而是恢复到之前的状态。非常感谢您的帮助。这是 MVP。

from multiprocessing import Process
from tkinter import *
import time
root = Tk()
var_a = 10


def set_callback():
    global var_a
    var_a = int(e1.get())
    print(var_a)


def pro_function():
    while True:
        print(var_a)
        time.sleep(0.1)


e1 = Entry(root)
e1.pack(pady=12)
button1 = Button(root, text="Set Var", command = set_callback )
button1.pack(pady=12)


if __name__ == '__main__':

    root.geometry('350x218')
    root.title("PythonLobby")
    x = Process(target=pro_function)
    x.start()
    root.mainloop()
    x.join()

【问题讨论】:

【参考方案1】:

您已经创建了一个全新的 PROCESS 来进行监控。该进程有自己的内存空间,与运行 GUI 的进程完全分开。如果您使用一个简单的线程来进行监视,您会发现它工作得很好。直接替换

    x = Process(target=pro_function)

    x = threading.Thread(target=pro_function)

您会看到值按预期更新。

【讨论】:

非常感谢。只要全力以赴。但是,如果想在内核之间传递变量怎么办? 这与核心无关。线程代码使用多个内核。您需要了解线程和进程之间的区别。如果你想在不同的进程之间传递值,那么你需要一个套接字或类似multiprocessing.queue的东西。 感谢您的澄清

以上是关于python从tkinter小部件设置全局变量的主要内容,如果未能解决你的问题,请参考以下文章

当 Flutter 中的全局变量更改(异步)时更新小部件

如何在 tkinter 中为多个按钮创建全局样式?

在 Tkinter Python 中的条目小部件内设置默认插入符号位置

如何从Tkinter,Python中的Text小部件中移除焦点

用python的Tkinter中的按钮,绑定的事件如何更改全局变量的问题

在 for 循环中创建几个 tkinter 小部件并将它们分配给变量