我有以下代码(实际程序的示例):
from tkinter import *
def class1(Frame)
def nv(self,x):
self.vent=Toplevel(self.master)
self.app=class2(self.vent)
self.value=x
def __init__(self,master):
super().__init__(master)
self.master=master
self.frame=Frame(self.master)
self.btn=Button(self, text="example", command=lambda: self.nw(1))
self.btn.pack()
self.pack()
def class2(Frame):
def __init__(self, master):
super().__init__(master)
self.master=master
self.frame=Frame(self.master)
self.value=class1.nw.value.get()
root= Tk()
marco=Frame(root)
marco.pack
lf=class1(marco)
root.mainloop()
最后一部分是问题所在,对于这个问题,我不能正确地使用.get(),我希望在创建新窗口时得到x的值。我使用lambda来执行带有参数的命令。所以问题是,是否有一种方法可以让我访问第2类中x的值?
发布于 2016-01-25 07:20:02
在使用tkinter
时,您似乎对类的用法感到非常困惑。super()
不应该像解释的here那样与tkinter一起使用,在声明类时应该使用class
关键字,而不是def
。.get()
是tkinter
变量类(如tkinter.IntVar
、tkinter.StringVar
等)的一种方法,因此在您给出的示例中不需要这样做。
您需要的是Frame
中的函数,您试图从(nv
)中获取x的值,然后将该值解析为子Frame
中的__init__
方法。
这是我的解决方案:
from tkinter import *
class Class1(Frame):
def nv(self,x):
self.vent = Toplevel(self.master)
self.app = Class2(self.vent,x)
def __init__(self,master):
Frame.__init__(self,master)
self.master = master
self.btn = Button(self, text="example", command=lambda: self.nv(1))
self.btn.pack()
self.pack()
class Class2(Frame):
def __init__(self, master, x):
Frame.__init__(self,master)
self.master=master
self.frame=Frame(self.master)
self.x_text = Label(self, text=str(x))
self.x_text.pack()
self.pack()
root = Tk()
marco = Frame(root)
marco.pack()
lf = Class1(marco)
root.mainloop()
https://stackoverflow.com/questions/34994991
复制相似问题