<p>看到我的<strong>愚蠢的<strong>错误后,设法让它工作起来。这些错误是由于GUI类的初始化顺序造成的。监控GUI类在设置GUI屏幕之前启动,其中单选按钮变量被分组为IntVar()类。通过更改它们在MainView类中初始化的顺序并首先运行Setup类(实际上是我的第6页),可以解决这个问题。简化后的代码如下所示</p>
<pre><code>global Filter_Num = 2 #Initial Junk integer
Class Page4(page): ##IO Page##
def __init__(self, *args, **kwargs):
Page.__init__(self, *args, **kwargs)
self.Create_IO_Widgets()
self.IO_Updater()
def Create_IO_Widgets(self):
self.Filter2Can = tk.Canvas(self, width=30, height=30, bg="DarkOrange1")
self.Filter2i = self.Filter2Can.create_oval(2,2,28,28,fill="red")
self.Filter2Can.place(x=200,y=200)
def Update_IO_Reading(self):
if (Filter_Num.get()<2):
self.Filter2Can.itemconfigure(self.Filter2i, fill="black")
else:
self.Filter2Can.itemconfigure(self.Filter2i, fill="red")
def IO_Updater(self):
self.Update_IO_Reading()
self.after(500, self.IO_Updater)
Class Page6(Page): ##Setup Page##
def __init__(self, *args, **kwargs):
Page.__init__(self, *args, **kwargs)
self.Create_Setup_Widgets()
def Create_Setup_Widget(self)
global Filter_Num #Global declared in function so that Change can be made
Filter_Num = tk.IntVar(Value=#) #Actual initial read value can be changed in here
Filt1= tk.Radiobutton(self, text="1", variable=Filter_Num, value=1)
Filt1.place(x=100,y=100)
Filt2= tk.Radiobutton(self, text="2", variable=Filter_Num, value=2)
Filt2.place(x=120,y=100)
Class MainView(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
p6 = Page6(self);p4 = Page4(self) #Initializing Order Changed to prevent incorrect initial readings
</code></pre>
<p>尽管实际错误与预期略有不同,而且是一个愚蠢的错误,但我将把这个问题留待讨论</p>
<p>回答=<strong>确保代码的运行顺序正确</strong></p>