首页 > 解决方案 > AttributeError:“Demo1”对象没有属性“文本框”

问题描述

我正在从第一个类(Demo1 )调用一个函数( fun1 ),并从调用函数(fun1 )调用另一个类(Demo2 )的另一个函数(data )来发送结果,但是我在尝试时收到以下错误在文本框中得到该结果。我怀疑这是因为阶级自我冲突。你能帮我解决这个问题吗?

请找到代码:

from tkinter import ttk
import tkinter as tk
from tkinter import *


def fun1(self,name):
    result="check"
    Demo2.data(result)
    
def cal(master):
     master = Demo2(master)

class Demo1:
    
    def __init__(self, master):
        self.master = master

        button=tk.Button(self.master, text="check",anchor="w",command=lambda :fun1(self,"abc") )
        button.grid(row=0,column=1)
        button.config(command=lambda button=button: [cal(self.master),fun1(self,"abc")])
            
        
class Demo2:
    def __init__(self, master):
        self.master = master

        self.textbox=tk.Text(self.master,font=('Calibri',12))
        self.textbox.grid(row=0,column=1)
        

    def data(self,data):
        self.textbox.insert('end',data)


                            
def main():
    root = tk.Tk()
    app = Demo1(root)
    root.mainloop()


if __name__ == '__main__':
    main()        
 

 

错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Python\Python38\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "C:/Users/Desktop/New folder/demo/che.py", line 16, in <lambda>
    self.button=tk.Button(self.master, text="check",anchor="w",command=lambda :fun1(self,"abc") )
  File "C:/Users/Desktop/New folder/demo/che.py", line 8, in fun1
    Demo2.data(self,result)
  File "C:/Users/Desktop/New folder/demo/che.py", line 29, in data
    self.textbox.insert('end',data) #Error
AttributeError: 'Demo1' object has no attribute 'textbox'

标签: python-3.xtkinterself

解决方案


在这里,您可以稍微修复一下您的代码:

from tkinter import ttk
import tkinter as tk
from tkinter import *


def fun1(parent, name):
    result = "check"
    master = Demo2(parent)
    master.data(result)


class Demo1:
    def __init__(self, master):
        self.master = master

        button = tk.Button(self.master, text="check", anchor="w", command=lambda: fun1(self.master, "abc"))
        button.grid(row=0, column=1)


class Demo2:
    def __init__(self, master):
        self.master = master

        self.textbox = tk.Text(self.master, font=('Calibri', 12))
        self.textbox.grid(row=0, column=1)

    def data(self, data):
        self.textbox.insert('end', data)


def main():
    root = tk.Tk()
    Demo1(root)
    root.mainloop()


if __name__ == '__main__':
    main()

你也没有使用名字fun1()


推荐阅读