如何创建 ttk.笔记本并添加另一个 ttk。每个选项卡中都有笔记本?

问题描述 投票:0回答:1

我的问题就在问题里。 因为我得到这个: _tkinter.TclError: can't put .!notebook.!frame.!frame.!notebook inside .!notebook.!frame.!frame,会导致管理循环

from tkinter import *
from tkinter import ttk

class Agenda(Frame):
    def __init__(self, master):
        Frame.__init__(self, master=None)
        self.master = master
        self.notebook = ttk.Notebook(self.master)
        self.frames = []
        self.cadres = []
        self.horaires = ["7 heures", "8 heures", "9 heures", "10 heures", "11 heures"]
        self.notes = []
        self.frames_horaires=[]

    def creer_onglets(self, liste):
        for i in range(len(liste)):
            self.frames.append(ttk.Frame(self.notebook))
            self.notebook.add(self.frames[i], text=liste[i])
            self.notebook.pack()

            self.cadres.append(ttk.Frame(self.frames[i]))
            self.cadres[i].pack(anchor='nw', expand=True)
            self.notes.append(ttk.Notebook(self.cadres[i]))
            for j in range(len(self.notes)):
                for k in range(len(self.horaires)):
                    self.frames_horaires.append(ttk.Frame(self.notes[i]))
                    self.notes[i].add(self.frames[i], text=self.horaires[i])
                    self.notes[i].pack()

            ttk.Label(self.cadres[i], text=f"Jour {i+1} de la semaine", background='lightblue').pack()

if __name__ == '__main__':
    root = Tk()
    root.title('Test de Notebook')
    agenda = Agenda(root)
    jours = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'vendredi', 'Samedi', 'Dimanche']
    agenda.creer_onglets(liste=jours)
    root.mainloop()
tkinter ttkwidgets
1个回答
0
投票

这段代码有几个问题。主循环中有两个嵌套循环,这是不必要的,并且不会访问索引变量 j 和 k。您的代码正在为每个笔记本中的同一时间段创建多个选项卡。

self.frames_horaires
在主循环的每次迭代中获取 5 个元素,但仅访问索引
i
处的元素来创建时隙选项卡。此外,您还在循环内调用
self.notebook
self.notes[i]
的 pack 方法,这也是不正确的。这是修改后的代码,可以运行。

from tkinter import *
from tkinter import ttk

class Agenda(Frame):
    def __init__(self, master):
        Frame.__init__(self, master=None)
        self.master = master
        self.notebook = ttk.Notebook(self.master)
        self.frames = []
        self.cadres = []
        self.horaires = ["7 heures", "8 heures", "9 heures", "10 heures", "11 heures"]
        self.notes = []
        self.frames_horaires=[]
    def creer_onglets(self, liste):
        for i in range(len(liste)):
           self.frames.append(ttk.Frame(self.notebook))
           self.notebook.add(self.frames[i], text=liste[i])
           # self.notebook.pack()

           self.cadres.append(ttk.Frame(self.frames[i]))
           self.cadres[i].pack(anchor='nw', expand=True)
           self.notes.append(ttk.Notebook(self.cadres[i]))

           frames_horaires_list=[] # create an empty list to add frames
           for horaires in self.horaires: # looping over each time slot
               frame_horaire = ttk.Frame(self.notes[i])
               frames_horaires_list.append(frame_horaire)
               self.notes[i].add(frame_horaire,text = horaires) # adding time slot tab to notes[i], i.e, notebook within cadre frame of each tab of day
           self.frames_horaires.append(frames_horaires_list) #append the frames list to the self.frame_horaires list
           self.notes[i].pack() # pack the notes[i] frame once the time slot tabs are added
      
           ttk.Label(self.cadres[i], text=f"Jour {i+1} de la semaine", background='lightblue').pack()
        self.notebook.pack()

if __name__ == '__main__':
    root = Tk()
    root.title('Test de Notebook')
    agenda = Agenda(root)
    jours = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'vendredi', 'Samedi', 'Dimanche']
    agenda.creer_onglets(liste=jours)
    root.mainloop()

以下是截图:

© www.soinside.com 2019 - 2024. All rights reserved.