嗨,我想知道第一段代码(有效)和第二段代码(无效)之间的区别。
第1块:
from tkinter import *
class Temp:
def __init__(self, master):
self.master = master
self.var = self.userEntryFunc()
self.var.pack()
def userEntryFunc(self):
return Entry(self.master)
def getval(x,y):
cn1 = x.var.get()
cn2 = y.var.get()
print(cn1 + " and " + cn2)
root = Tk()
root.geometry("500x500")
Name = Temp(root)
Name2 = Temp(root)
b = Button(root, text="pree", command=lambda: getval(Name,Name2))
b.pack()
root.mainloop()
第2块:
from tkinter import *
class Temp:
def __init__(self, master):
self.master = master
def userEntryFunc(self):
return Entry(self.master)
def getValue(self):
self.var = self.userEntryFunc()
self.var.pack()
def getval(x,y):
cn1 = x.var.get()
cn2 = y.var.get()
print(cn1 + " and " + cn2)
root = Tk()
root.geometry("500x500")
Name = Temp(root).getValue()
Name2 = Temp(root).getValue()
b = Button(root, text="pree", command=lambda: getval(Name, Name2))
b.pack()
root.mainloop()
block2错误消息:
Exception in Tkinter callback
Traceback (most recent call last):
File "<ipython-input-111-c906f1aea49c>", line 24, in <lambda>
b = Button(root, text="pree", command=lambda: getval(Name, Name2))
File "<ipython-input-111-c906f1aea49c>", line 16, in getval
cn1 = x.var.get()
AttributeError: 'NoneType' object has no attribute 'var'
我的主要目标是让多个Temp类型的对象在Variable类中具有不同的tkinter小部件定义,并将它们的值用作将来代码的变量。我的问题是,我不想在 init 函数中使用5种不同的条件来针对不同的变量类型(用户输入,按钮,目录浏览)执行此操作。例如:
if varName=="userEntry":
self.var = self.userEntryFunc()
self.var.pack()
elif varName=="radioButton":
self.var = self.radioButtonFunction()
...
答案 0 :(得分:2)
在第一个代码示例中,Entry
小部件由__init__
函数(创建实例时)通过userEntryFunc
函数创建,然后打包。但是,在第二个示例中,Temp
类在创建时不会创建任何东西,它的getValue
函数必须在外部调用。
您遇到的错误发生是因为clientName
和clientName2
实际上是分配给getValue
而不是Temp
实例的返回值。要解决此问题,您需要将实例分配给变量,然后调用getValue
函数,如下所示:
clientName = Temp(root, "Client Name")
clientName.getValue()
clientName2 = Temp(root, "Client Name2")
clientName2.getValue()
还请注意以下行:
lister = [clientName, clientName2]
在示例1中,将创建一个错误,而是使用:
lister = [Name, Name2]
编辑:以上问题现已解决