回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>当你使用一个对象作为参数时,我试图修正一些与对象返回的内容相关的问题。你知道吗</p>
<p>例如,我有一个自定义对象,我想用它作为另一个tkinter小部件的父对象,所以我需要返回一个tkinter对象,将新的tkinter对象放入我的自定义对象中,但是我的自定义对象返回的是自定义类的对象。你知道吗</p>
<p>我可以用代码更好地解释这一点:</p>
<pre><code>class CustomFrame(object):
def __init__(self,**args):
#code that works
#The next is an external object that have a variable that I need to call externally.
#The variable is "interior"
self.externalobject = anotherobject('random')
cfr1 = CustomFrame()
label1 = Label(cfr1)
</code></pre>
<p>现在我想用“self.externalobject.interior内部“作为label1的父级
但我想让它变得友好,只是叫“cfr1”而不是“cfr1”self.externalobject.interior内部““</p>
<p>我知道,如果我使用<strong>调用</strong>方法并返回所需的值,那么如果我将“cfr1”作为函数传递,它将起作用,但我希望使它尽可能具有python特性。你知道吗</p>
<p>所以我需要知道是否有其他特殊的方法或东西来修改它返回的内容。你知道吗</p>
<p>编辑:
所以,这是我使用的代码的一部分:</p>
<p>这是垂直滚动框的代码(不是我的代码)。你知道吗</p>
<pre><code>class VerticalScrolledFrame(Frame):
"""A pure Tkinter scrollable frame that actually works!
* Use the 'interior' attribute to place widgets inside the scrollable frame
* Construct and pack/place/grid normally
* This frame only allows vertical scrolling
"""
def __init__(self, parent, bg, *args, **kw):
Frame.__init__(self, parent, *args, **kw)
# create a canvas object and a vertical scrollbar for scrolling it
vscrollbar = Scrollbar(self, orient=VERTICAL)
canvas = Canvas(self, bd=0, highlightthickness=0,
yscrollcommand=vscrollbar.set,bg=bg)
vscrollbar.config(command=canvas.yview)
canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
# reset the view
canvas.xview_moveto(0)
canvas.yview_moveto(0)
# create a frame inside the canvas which will be scrolled with it
self.interior = interior = Frame(canvas,bg=bg)
interior_id = canvas.create_window(0, 0, window=interior,
anchor=NW)
a = Frame(self.interior,height=10,bg=dynamicBackground())
a.pack()
def canvasscroll(event):
canvas.yview('scroll',int(-1*(event.delta/120)), "units")
def _configure_canvas(event):
a.configure(height=10)
a.update()
mylist = interior.winfo_children()
for i in mylist:
lasty=i.winfo_height()+i.winfo_y()
a.configure(height=lasty)
if interior.winfo_reqwidth() != canvas.winfo_width():
# update the inner frame's width to fill the canvas
canvas.itemconfigure(interior_id, width=canvas.winfo_width())
if canvas.winfo_height()<lasty:
vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
canvas.config(scrollregion=(0,0,0,lasty))
canvas.bind_all("<MouseWheel>", canvasscroll)
else:
canvas.unbind_all("<MouseWheel>")
try:
vscrollbar.pack_forget()
except:
pass
canvas.config(scrollregion=(0,0,0,0))
canvas.bind('<Configure>', _configure_canvas)
</code></pre>
<p>这是我自定义对象的代码:</p>
<pre><code>class UtilityPanel(object):
def __init__(self,parent='*',title='Main Title',state='normal',bg='red'):
super().__init__()
if parent != '*':
self.parent=parent
else:
raise TypeError('You must specify a parent for this widget.')
self.title=title
global subpanels
if len(subpanels) == 0:
self.panelid = 'sp-1'
subpanels.append('sp-1')
else:
self.panelid = 'sp-'+str(int(subpanels[-1].split('-')[1])+1)
subpanels.append(self.panelid)
self.panel = VerticalScrolledFrame(self.parent,bg=bg,width=600,height=200,name=self.panelid)
def __call__(self,name):
return(self.panel.interior)
def pack(self):
self.panel.place(x=300)
global activepanel
activepanel = self.panelid
</code></pre>
<p>所以,如果我像<code>label1 = Label(cfr1.panel.interior)</code>那样传递参数,它就可以工作了,但是我想让它只传递cfr1作为参数。你知道吗</p>