我的问题就在问题里。 因为我得到这个: _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()
这段代码有几个问题。主循环中有两个嵌套循环,这是不必要的,并且不会访问索引变量 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()
以下是截图: