Python 在类中,如何对已经有类的对象调用方法?
目前我正在使用tkinter,我需要对具有Tk()类的对象调用一个方法。我试图调用的不是Tk()类中的方法,而是我已经创建的类,tkinter对象已经在该类中 我试图调用.Format()到l\u label,但我认为它试图在tkinter的label类中找到一个属性或方法,因为它返回:AttributeError:“label”对象没有属性“Format” 有什么想法吗Python 在类中,如何对已经有类的对象调用方法?,python,class,tkinter,methods,Python,Class,Tkinter,Methods,目前我正在使用tkinter,我需要对具有Tk()类的对象调用一个方法。我试图调用的不是Tk()类中的方法,而是我已经创建的类,tkinter对象已经在该类中 我试图调用.Format()到l\u label,但我认为它试图在tkinter的label类中找到一个属性或方法,因为它返回:AttributeError:“label”对象没有属性“Format” 有什么想法吗 from tkinter import * from tkinter import messagebox from tkin
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
thing = Tk()
class App():
def __init__(self, master, _title, back='white'):
self.master = master
self._title = _title
self.back = back
self.master.title(self._title)
self.master.configure(background=back)
def label(self, _text, back='white', w=1, h=1):
self.back = back
self.w = w
self.h = h
self._text = _text
l_label = Label(self.master, text=self._text, bg=self.back, width=self.w, height=self.h)
return l_label
def Format(self, l_label, Row=1, Column=1):
self.Row = Row
self.Column = Column
l_label.grid(row=Row, column=Column)
app = App(thing, 'hello world')
label = app.label('this is a text boc', 'white').Format()
thing.mainloop()
您正在寻找的是方法链接。为了使其正常工作,您的函数需要返回
self
class App(object):
def __init__(self, master, _title, back='white'):
self.master = master
self._title = _title
self.back = back
self.master.title(self._title)
self.master.configure(background=back)
self.w = None
self.h = None
self._text = None
self.Row = None
self.Column = None
self.l_label = None
def label(self, _text, back='white', w=1, h=1):
self.back = back
self.w = w
self.h = h
self._text = _text
self.l_label = Label(self.master, text=_text, bg=back, width=w, height=h)
return self
def Format(self, Row=1, Column=1):
self.Row = Row
self.Column = Column
self.l_label.grid(row=Row, column=Column)
return self
注意我是如何从格式中删除l\u标签的
,并将标签(self.master,text=\u text,bg=back,width=w,height=h)
分配给self.l\u标签的
那么你就可以做到:
thing = Tk()
app = App(thing, 'hello world')
label = app.label('this is a text box', 'white', 15, 15).Format()
thing.mainloop()
请缩进您定义的类
格式
作为App
对象的方法,但它将接受标签
作为其第一个参数。因此,如果以后不需要label
变量,您可以将其称为app.Format(label)
,也可以将其称为app.Format(app.label(…)
。是的,这是有效的。我想更多的是为了找到方法链接。谢谢你的回答:)谢谢你,那正是我想要的:)。是否有任何理由在init中列出所有无值的自变量?或者只是为了让脚本更有条理?这样你就不会在\uuuuuu init\uuuuuu
之外定义一个实例属性。这里有一个快速的答案,解释为什么我们在\uuuuuu init\uuuuuu
中将它指定为None:实际上app
和label
都引用了app
类的同一个实例,所以标签是不必要的。acw1668确实如此,我不知道我为什么这么做。谢谢,克里斯,这很有帮助:)