tkinter,在主窗口中显示子窗口的值

时间:2015-11-05 10:31:16

标签: python tkinter

我想要一个起始值为“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()

1 个答案:

答案 0 :(得分:0)

如果您使用atext=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()