Python 什么';确定tkinter UI类属性是否已从外部模块更改的最佳方法是什么?
我目前正在开发一个模块化的神经网络程序,它有一个Tkinter用户界面模块、一个神经网络模块和一个允许两者通信的“主”模块 问题是,我需要从UI类属性中检索网络参数列表(以便实例化神经网络类),但只有在更新之后(通过用户与小部件的交互)才需要 基于Python 什么';确定tkinter UI类属性是否已从外部模块更改的最佳方法是什么?,python,multithreading,tkinter,module,Python,Multithreading,Tkinter,Module,我目前正在开发一个模块化的神经网络程序,它有一个Tkinter用户界面模块、一个神经网络模块和一个允许两者通信的“主”模块 问题是,我需要从UI类属性中检索网络参数列表(以便实例化神经网络类),但只有在更新之后(通过用户与小部件的交互)才需要 基于parameters=[]是否运行的while循环是不可行的,因为据我所知,在没有多线程的情况下无法同时更新窗口,但Tkinter不是线程安全的 对于任何技术上的错误,我深表歉意,我对编程和它的术语还比较陌生 UI.py train = Button(
parameters=[]
是否运行的while循环是不可行的,因为据我所知,在没有多线程的情况下无法同时更新窗口,但Tkinter不是线程安全的
对于任何技术上的错误,我深表歉意,我对编程和它的术语还比较陌生
UI.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.
Main.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.
请注意,上面的代码纯粹是实验性的,只是让您了解我想要实现的目标。您能提供一个简单的示例来说明您想要做什么吗?现在还不清楚“UI类属性已经设置”是什么意思——你是在问改变字体或颜色的事情吗?或者,您是否在询问他们何时更改条目小部件中的值或画布上的对象等?Tkinter不具有线程安全性并不意味着您不能使用线程-它只是意味着所有使用和与它的交互必须仅在其中一个线程中进行。这通常是主线程,但不一定是。线程可以通过
队列
或共享的全局资源相互通信(如果采取措施确保不能同时访问它们)。@BryanOakley澄清一下,我的意思是当self.parameters
通过输入条目小部件将值从空列表更改为有效参数列表时。因此,不是widget属性,而是自定义类的自定义属性?@martineau我知道这一点,但是,我正在努力找到一种方法来将它们用于我想要的目的。如果不通过root.update()
更新窗口,就不可能将参数输入到条目窗口小部件中,但所有Tkinter逻辑似乎都需要约束到主线程,因此我似乎无法在不同的线程中检索参数。当然,这至少需要两个线程,并且都依赖于某种形式的Tkinter逻辑?您能提供一个您尝试执行的最小示例吗?现在还不清楚“UI类属性已经设置”是什么意思——你是在问改变字体或颜色的事情吗?或者,您是否在询问他们何时更改条目小部件中的值或画布上的对象等?Tkinter不具有线程安全性并不意味着您不能使用线程-它只是意味着所有使用和与它的交互必须仅在其中一个线程中进行。这通常是主线程,但不一定是。线程可以通过队列
或共享的全局资源相互通信(如果采取措施确保不能同时访问它们)。@BryanOakley澄清一下,我的意思是当self.parameters
通过输入条目小部件将值从空列表更改为有效参数列表时。因此,不是widget属性,而是自定义类的自定义属性?@martineau我知道这一点,但是,我正在努力找到一种方法来将它们用于我想要的目的。如果不通过root.update()
更新窗口,就不可能将参数输入到条目窗口小部件中,但所有Tkinter逻辑似乎都需要约束到主线程,因此我似乎无法在不同的线程中检索参数。当然,这至少需要两个线程,并且都依赖于某种形式的Tkinter逻辑?