Tkinter class Inheritance ничего не показывает

Я могу не очень хорошо разбираться в наследовании или пропустил некоторые подробности о нем. Я читал https://stackoverflow.com/a/40130619/5989438 и думал, что мне нужно сделать это таким образом, но это не работает.

У меня есть полная программа в классе Application (), который находится на вкладке «Week_1». Что касается ООП и моих ограниченных знаний, я думал о создании класса для каждой вкладки (каждую неделю), поэтому я написал такую ​​программу. Если есть лучшая настройка, я буду рад узнать. Спасибо за помощь. Вот сокращенная версия программы.

import tkinter as tk
from tkinter import ttk

#upper tabs
upper_tabs = ["Final", "Requests", "Control"]
lower_tabs = ["Week 1", "Week 2"]
tabs2 = {} #upper
tabs = {} #lower

class Application(tk.Frame): #inherent from frame.
    def __init__(self, parent):
        tk.Frame.__init__(self, parent, bg = "tan")
        self.parent = parent
        self.pack(fill=tk.BOTH, expand=1)
        self.Days= ["Monday", "Tuesday", "Wednesday", "Thursday",    
                    "Friday", "Saturday", "Sunday"]
        self.GUI()

    def GUI(self): #the function that runs all the GUI functions.
        self.create_lower_tabs()

####---------create grid_GUI---------------------####

    def create_lower_tabs(self):
        style1 = ttk.Style()
        style1.configure("down.TNotebook", tabposition = "sw")
        self.tabControl_lower = ttk.Notebook(self, width=1200,   
                                            height=550, padding = 0,  
                                            style = "down.TNotebook" )
        for name in lower_tabs:
            self.tab1=tk.Frame(self.tabControl_lower, bg='old lace')
            self.tabControl_lower.add(self.tab1, text=name, )
            tabs[name] = self.tab1 #add the widets to the dict.
            self.tabControl_lower.pack(fill=tk.BOTH, expand=1)

class Week_1(Application):
    def __init__(self, parent):
        Application.__init__(self, parent)
        week_1 = Week_1(Application)
        self.pack(fill=tk.BOTH, expand=1)
        self.GUI()

    def GUI(self): #the function that runs all the GUI functions.
        self.buttons("Week 1")

    def buttons(self, name):
        self.button = tk.Button(tabs[name], text = "test button",          
                                bg = "salmon",)
        self.button.pack()



def main():
    root = tk.Tk()
    root.title("class basic window")
    root.config(background = "LightBlue4")
    app = Application(root)
    root.mainloop()

if __name__ == '__main__':
    main()

Вы никогда не создаете экземпляр Week_2. Во-вторых, ошибка отступа на Week_2.GUI. Редизайн на class Application содержит Толькоnotebook lower tabs с экземплярами Week_1 и Week_2, связанными с notbook tabs. class Week содержит все виджеты недели.

stovfl 04.12.2018 12:28

@stovfl благодарит за ваши комментарии по реорганизации родительского класса. просто чтобы упростить задачу, я изменил код, чтобы отображалась только одна кнопка, которая по-прежнему не работает. Я не знаю, в чем проблема, и поэтому мне нужна ваша помощь. Я создал экземпляр, но, возможно, размещение экземпляра неправильное? Я поместил экземпляр между «def buttons ()» и «def main ()», и он говорит: «TypeError: __init __ () отсутствует 1 требуемый позиционный аргумент: 'parent'». Возможно ли, что вы можете указать, где именно я ошибаюсь? еще раз спасибо.

fishtang 06.12.2018 07:40

Это слишком широко для ТАК. Установите GitHub Gist, я там прокомментирую.

stovfl 06.12.2018 11:04

@stovfl это на GitHub Gist. gist.github.com/Fishtang01/31206d1fddf5c7db318fd2dae9e3d8f8 еще раз спасибо.

fishtang 06.12.2018 19:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
104
0

Другие вопросы по теме