Объединение виджетов Tkinter в единый класс ограничивает доступность? - PullRequest
0 голосов
/ 26 ноября 2018

Я работаю над проектом, который предусматривает создание множества экземпляров ярлыков 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 голосов
/ 26 ноября 2018

Прежде всего, если вы создаете новый класс, содержащий два объекта разных классов, вам не следует использовать наследование.Вместо этого используйте композицию.

Во-вторых, чтобы иметь доступ к виджету записи, сохраните его в переменной экземпляра.

Например:

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...