首页 > 解决方案 > 确定 tkinter UI 类属性是否已从外部模块更改的最佳方法是什么?

问题描述

我目前正在开发一个模块化的神经网络程序,它有一个 Tkinter UI 模块、一个神经网络模块和一个允许两者进行通信的“主”模块。

问题是我需要从 UI 类属性中检索网络参数列表(以便实例化神经网络类),但只有在更新后(通过用户与小部件的交互)。

基于是否parameters = []不可行运行的while循环,因为我知道,没有办法在没有多线程的情况下同时更新窗口,但Tkinter不是线程安全的。

对于任何技术上的不准确之处深表歉意,我对编程及其术语比较陌生。

用户界面.py

train = Button(self.parameterframe, text="Train", command=lambda: self.train())
        train.place(x=257, y=150)

    def train(self):

        parameters = [self.epochs.get(), self.layer1neurons.get(),
                      self.layer2neurons.get(), self.batchsize.get(),
                      self.learningrate.get()]

        for p in parameters:

            try:

                if p == self.learningrate.get():
                    float(p)
                else:
                    int(p)

            except ValueError:

                messagebox.showerror(title="Error", message="Please ensure that all parameters are of the correct type.")
                return

        self.parameters = parameters

主文件

def refresh():
    root = Tk()
    interface = UI.create_ui(root)
    while True:
        root.update()
        time.sleep(0.1)

thread = thread.Thread(target=refresh())
thread.start()

#Then a while  loop for retrieving parameters followed by a .join() statement.

请注意,上面的代码纯粹是实验性的,只是为了让您了解我想要实现的目标。

标签: pythonmultithreadingtkintermodule

解决方案


推荐阅读