如何解决Tkinter 自定义文本框类不能使用 def
我可能忽略了一些明显的问题,但这个问题让我陷入了困境。 我想弹出多个文本框并动态填充每个文本框。当我运行以下代码时,我得到一个“AttributeError”,出于某种原因,它希望我在 def 中为“self”提供一些东西。
class NoninteractiveTextBox:
def __init__(self,master,location,sizew,sizeh):
self.text_Box = Text(master,width=sizew,height=sizeh,font=("Helvetica",16))
self.text_Box.tag_configure("center",justify="center")
self.text_Box.place(x=location[0],y=location[1])
self.text_Box.tag_add("center","1.0","end")
self.text_Box.config(state="disabled")
def inject_text(self,event_text):
self.text_Box.config(state="normal")
self.text_Box.insert(1.0,event_text)
self.text_Box.tag_add("center","end")
self.text_Box.config(state="disabled")
以下基本上是主要的。
from tkinter import *
from WidgetsTools import NoninteractiveTextBox
root = Tk()
root.title('test text')
root.geometry("1600x900")
location = [100,500]
ntb = NoninteractiveTextBox
ntb(root,80,10)
ntb.inject_text(???,"testing text for NTB")
root.mainloop()
ntb.inject_text(???,"testing text for NTB") 是问题所在,我想这是我制作课程本身的一个新手错误。任何提示都会有很大帮助。
解决方法
应该是:
ntb = NoninteractiveTextBox(root,location,80,10)
ntb.inject_text("testing text for NTB")
,
ntb = NoninteractiveTextBox
ntb(root,10)
这是一种非常,我们可以说,...尝试创建类实例的不寻常方式:-)
第一行将 ntb
设置为对 类的引用, 不是类的实例。
由于 ntb
和 NoninteractiveTextBox
现在实际上是对类的相同引用,因此第二行与使用后者代替前者相同(顺便说一句,为什么它并没有因为缺少 self
) 而失败:
NoninteractiveTextBox(root,10)
换句话说,它创建一个实例,但立即将其丢弃,因为您没有将它分配给任何东西。
这行的问题就在这里:
ntb.inject_text("testing text for NTB")
因为 ntb
是类而不是实例,因此被视为类方法调用,不会自动提供 self
作为第一个参数。这就是它抱怨缺少参数的原因。
你应该改用它,将 ntb
设置为你的类的一个实例,并允许它这样使用:
ntb = NoninteractiveTextBox(root,10)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。