将Tkinter窗口小部件合并为单个类会限制可访问性吗?

时间:2018-11-25 21:45:52

标签: python-3.x tkinter

我正在从事一个项目,该项目涉及创建许多Tkinter标签和Entry小部件实例,这些实例将始终彼此对齐。为了节省时间,我创建了一个自定义类,如下所示:

 class labelEntry(Label,Entry):
  def __init__(self,parent,label,row,column,bg_color):
    Label.__init__(self,parent)
    self['text']=label
    self['justify']='right'
    self['bg']=bg_color
    self.grid(row=row,column=column, sticky=E)


    Entry.__init__(self,parent)
    self['width']="10"
    self.grid(row=row,column=column+1)

这将创建我想要的配置,并且很容易安排(我将它们存储在框架中)。问题是我不知道如何访问我创建的Entry小部件,因为它们是该新类的一部分。

我希望从条目小部件中读取和删除条目。我想清除它们的最佳猜测是,该按钮被送入了同一帧:

class clearAllEntry(Button):
def clearAll(self,targetFrame):
    targetFrame.labelEntry.Entry.delete(0,END)

def __init__(self,parent,targetFrame):
    Button.__init__(self,parent,text='Clear All Entries',bg='black',fg='white')
    self['command']= "clearAll(targetFrame)"

我也将grid_slave视为一种方法,但是存在相同的问题。 任何建议/帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先,如果要创建一个包含两个不同类的对象的新类,则不应使用继承。而是使用合成。

第二,要访问条目窗口小部件,请将其保存到实例变量。

例如:

class LabelEntry():
    def __init__(self, parent, label, row, column, bg_color):

        self.label = Label(parent, text=label, justify='right', bg=bg_color)
        self.entry = Entry(parent, width=10)

        self.label.grid(row=row, column=column, sticky="e")
        self.grid(row=row,column=column+1)

稍后,您可以像引用任何其他属性一样引用这些属性:

le1 = LabelEntry(root)
...
print(le1.entry.get())