2015-11-05 104 views
0

我想有一个窗口,例如开始值为“0”。然后,当我打开另一个窗口时,我希望能够在那里输入一个值,然后点击一个按钮(这里确定)我希望显示该值而不是“0”(或任何其他先前的值)。遗憾的是,最后一部分不起作用(点击OK后,值保持为零)。这是什么,我做错了?tkinter,在主窗口中显示从子窗口的值

另外,我可以放置在clsApp的内部?我没有这样做,因为我认为主循环将始终将其设置为起始值。 (诚​​然,我没有搜索这一个,所以我不介意,如果你能告诉我它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

如果你把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() 
相关问题