Можно создать различное количество объектов фрейма / вкладки и связать каждый из них с именем? - PullRequest
0 голосов
/ 06 апреля 2019

Я читаю структуру папок для игры, где каждая учетная запись имеет подпапки для серверов, а затем подпапки для персонажей, а в папках персонажей есть текстовый файл.

То, что я пытаюсь создать с помощью tkinter и ttk в моем корневом окне, составляет 1tab / frame для каждой учетной записи и под каждой учетной записью 1 вкладка для каждого сервера, а затем 1 вкладка для каждого символа, где я, наконец, помещу текст из каждого файла символов .

Поскольку я читаю это из файловой системы, количество учетных записей, серверов и символов может различаться, поэтому я перебираю их, чтобы создать объекты виджета tkinter.

Проблема в том, что я не могу понять, как привязать каждый объект к имени, чтобы я мог сравнивать / изменять значения объектов после того, как они созданы, чтобы просто иметь по 1 вкладке на сервер, например, где все символы ставить.

Я пробовал поискать в Google, но не могу найти то, что ищу. До сих пор я пытался создать класс для каждого файла, который я буду читать, и этот класс содержит всю необходимую информацию. Но я застреваю при создании объектов tkinter и пытаюсь понять, как это сделать.

Это мой класс, из которого я успешно создаю экземпляр со всей информацией, заполняемой для каждого файла, хотя они находятся в списке объектов без связанного имени / переменной:

class MacroObject(object):
    def __init__(self, name, realm, account, path):
        self.account = account
        self.realm = realm
        self.name = name
        self.path = path
        self.macroName = ''
        self.macroText = []

И это мой текущий подход к созданию графического интерфейса:

root = tk.Tk()

tabControl = ttk.Notebook(root)
tabControl.pack()

account_tabs = []
realm_tabs = []
character_tabs = []

accounts = []
realms = []

for objects in macro_objects:
    if objects.account not in accounts:
        tabControl.add(ttk.Frame(tabControl), text=objects.account)
        accounts.append(objects.account)
        for objects in macro_objects:
            if objects.account == ttk.Frame.text and objects.realm not 

Это то место, где я застреваю, и последняя строка, очевидно, не сработает, создается экземпляр ttk.Frame, и, похоже, я никак не могу сослаться на него, и я не могу понять, как его решить.

Я все еще начинающий, так что, наверное, это глупый вопрос, и, возможно, есть гораздо более простой подход для этого?

1 Ответ

0 голосов
/ 09 апреля 2019

Моя проблема была решена благодаря Мартино, напомнившему / заставляющему меня понять, что я могу хранить виджеты в словаре.

Я использовал значения из своих экземпляров класса MacroObject в качестве ключей, и через некоторое время я получил желаемый результат с иерархией вкладок ttk notebook: https://i.imgur.com/IsNmXiO.png

...