我想要一个起始值为“0”的窗口。然后,当我打开另一个窗口时,我希望能够在那里输入一个值,然后在单击一个按钮(这里确定)后,我希望显示此值而不是“0”(或任何其他先前的值)。不幸的是,最后一部分不起作用(点击OK后值保持为零)。是什么,我做错了?
另外,我可以在clsApp中放置一个吗?我没有这样做,因为我认为mainloop总是将它设置为起始值。 (不可否认,我没有搜索过这个,所以我不介意你告诉我googel吧。)
import tkinter as tk
a=0
class clsApp(object):
def __init__(self):
self.root=tk.Tk()
self.root.title("MainWindow")
##Labels##
self.rootLabel=tk.Label(self.root, text="WindowAppExperiment", padx=100)
self.aLabel=tk.Label(self.root, text=a, padx=100)
##Buttons##
self.exit=tk.Button(self.root, text="Quit", fg="red", command=self.root.quit)
self.newWindow=tk.Button(self.root, text ="Edit", command=lambda:self.clsNewWindow(self.root).run())
def grid (self):
self.rootLabel.pack()
self.aLabel.pack()
self.exit.pack(side="left")
self.newWindow.pack(side="left")
def run(self):
self.grid()
self.root.mainloop()
self.root.destroy()
class clsNewWindow(object):
def __init__(self, Parent):
self.parent=Parent
self.top=tk.Toplevel()
self.top.title("SubWindow")
##Labels##
self.textLabel=tk.Label(self.top, text ="Enter Value", padx=100)
##Entyfields##
self.E1=tk.Entry(self.top)
##Buttons##
self.Cancel=tk.Button(self.top, text ="Cancel", command=self.top.quit)
self.OK=tk.Button(self.top, text ="OK", command=lambda:self.getValue(self.E1))
def grid(self):
self.textLabel.pack()
self.E1.pack()
self.Cancel.pack()
self.OK.pack()
def getValue(self, entField):
global a
print(entField.get()) #test
a=entField.get()
print(a) #test
self.parent.update()
def run(self):
self.grid()
self.top.mainloop()
self.top.destroy()
clsApp().run()
答案 0 :(得分:0)
如果您使用a
将text=a
放在那里,它会查看它以获取该值一次,然后再也不会......除非您告诉它。您可以trace the variable或只是在子窗口中更改变量时在主窗口中更新变量:
def getValue(self, entField):
global a
print(entField.get()) #test
a=entField.get()
self.parent.alabel.config(text=a) # this right here
print(a) #test
self.parent.update()