在python中使用带有Tkinter的类

2024-09-30 08:15:38 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我想知道第一段代码(有效)和第二段代码(无效)之间有什么区别。在

区块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:

^{pr2}$

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()
        ...

Tags: lambda代码nameselfmastergetvardef
1条回答
网友
1楼 · 发布于 2024-09-30 08:15:38

在第一个代码示例中,Entry小部件是由__init__函数(在创建实例时)通过userEntryFunc函数创建的,然后打包。然而,在第二个示例中,Temp类在创建时不创建任何内容,它的getValue函数必须在外部调用。在

出现您所面临的错误是因为clientNameclientName2实际上被分配给getValue的返回值,而不是{}实例。要解决此问题,需要将实例分配给变量,然后调用getValue函数,如下所示:

clientName = Temp(root, "Client Name")
clientName.getValue()
clientName2 = Temp(root, "Client Name2")
clientName2.getValue()

还要注意的是:

^{pr2}$

在示例1中,将创建一个错误,请改用:

lister = [Name, Name2]

编辑:以上问题现已修复

相关问题 更多 >

    热门问题