Tkinter : Add columns with loop and manually in a Treeview : _tkinter.TclError: Column index out of bounds
Tkinter : Add columns with loop and manually in a Treeview : _tkinter.TclError: Column index out of bounds
您好,尝试制作具有不同列的 Treeview。
其中七列已定义,所有其他列都是使用循环创建的。
我知道如何使用循环创建列,我知道如何手动创建列,但我不知道如何同时在同一个 Treeview 上创建列。
这是我的代码:
# coding:utf-8
import tkinter as tk
from tkinter import Tk, ttk
class Tableau(Tk):
def __init__(self):
super().__init__()
self.title("My Treeview")
app_width = 1050
app_height = 600
screnn_width = self.winfo_screenwidth()
screnn_heigth = self.winfo_screenheight()
x = (screnn_width / 2) - (app_width / 2)
y = (screnn_heigth / 2) - (app_height / 2)
self.geometry(f'{app_width}x{app_height}+{int(x)}+{int(y)}')
# -------------------------------------------Configurer la page--------------------------------------------
self.config(background="azure")
self.resizable(0, 0)
self.focus_force()
# Ajouter un style
self.style = ttk.Style()
# Choisir un theme
self.style.theme_use('default')
# Configure treeview
self.style.configure("Treeview",
background="#D3D3D3",
foreground="black",
rowheight=25,
fieldbackground="#D3D3D3")
# Changer couleur
self.style.map('Treeview',
background=[('selected', '#347083')])
self.frame = tk.Frame(self)
self.frame.pack(pady=10)
self.tree_scroll_horizontal = tk.Scrollbar(
self.frame, orient='horizontal')
self.tree_scroll_horizontal.pack(side='bottom', fill='x')
self.tree = ttk.Treeview(
self.frame, xscrollcommand=self.tree_scroll_horizontal.set, columns=())
self.tree.pack()
self.tree_scroll_horizontal.config(command=self.tree.xview)
for self.k in range(8, 50):
print(self.k)
self.tree["columns"] = ("ID", "Programme", "Date de début", "Date de fin","Effectif nécessaire", "Numéro OP", "Type Hélicoptère", list(range(8, 50)))
self.tree.column(column="#0", width=0, stretch="no")
self.tree.column(column="ID", anchor="center", width=140)
self.tree.column(column="Programme", anchor="center", width=140)
self.tree.column(column="Date de début", anchor="center", width=140)
self.tree.column(column="Date de fin", anchor="center", width=140)
self.tree.column(column="Effectif nécessaire", anchor="center", width=150)
self.tree.column(column="Numéro OP", anchor="center", width=150)
self.tree.column(column="Type Hélicoptère", anchor="center", width=150)
self.tree.column(column=(str(self.k)), width=150, stretch=tk.NO)
self.tree.heading(column="#0", text="", anchor="w")
self.tree.heading(column="ID", text="ID", anchor="center")
self.tree.heading(column="Programme", text="Programme", anchor="center")
self.tree.heading(column="Date de début", text="Date de début", anchor="center")
self.tree.heading(column="Date de fin", text="Date de fin", anchor="center")
self.tree.heading(column="Effectif nécessaire",text="Effectif nécessaire", anchor="center")
self.tree.heading(column="Numéro OP", text="Numéro OP", anchor="center")
self.tree.heading(column="Type Hélicoptère",text="Type Hélicoptère", anchor="center")
self.tree.heading(column= (str(self.k)),text=("Semaine " + str(self.k)), anchor=tk.W)
self.tree.tag_configure('oddrow', background="white")
self.tree.tag_configure('evenrow', background="lightblue")
if __name__ == "__main__":
app = Tableau()
app.mainloop()
我收到此错误:_tkinter.TclError:列索引 8 越界
关注这一行:第 68 行,在 init
self.tree.column(列=(str(self.k)),宽度=150,拉伸=tk.NO)
那么如何在同一个树视图上同时创建这些列,而不用相同的方法来做到这一点。
注意下面一行:
self.tree["columns"] = ("ID", "Programme", "Date de début", "Date de fin","Effectif nécessaire", "Numéro OP", "Type Hélicoptère", list(range(8, 50)))
会将一个包含 8 个项目的元组(最后一项是列表)分配给 self.tree["columns"]
。所以索引是 0 到 7,当您尝试访问索引 8 中的项目时会引发异常。
正确的语法是:
self.tree["columns"] = ["ID", "Programme", "Date de début", "Date de fin", "Effectif nécessaire", "Numéro OP", "Type Hélicoptère"] + list(range(8, 50))
并且这一行应该放在for循环之前(包括其他一些行):
self.tree["columns"] = ["ID", "Programme", "Date de début", "Date de fin", "Effectif nécessaire", "Numéro OP", "Type Hélicoptère"] + list(range(8, 50))
self.tree.column(column="#0", width=0, stretch="no")
self.tree.column(column="ID", anchor="center", width=140)
self.tree.column(column="Programme", anchor="center", width=140)
self.tree.column(column="Date de début", anchor="center", width=140)
self.tree.column(column="Date de fin", anchor="center", width=140)
self.tree.column(column="Effectif nécessaire", anchor="center", width=150)
self.tree.column(column="Numéro OP", anchor="center", width=150)
self.tree.column(column="Type Hélicoptère", anchor="center", width=150)
self.tree.heading(column="#0", text="", anchor="w")
self.tree.heading(column="ID", text="ID", anchor="center")
self.tree.heading(column="Programme", text="Programme", anchor="center")
self.tree.heading(column="Date de début", text="Date de début", anchor="center")
self.tree.heading(column="Date de fin", text="Date de fin", anchor="center")
self.tree.heading(column="Effectif nécessaire",text="Effectif nécessaire", anchor="center")
self.tree.heading(column="Numéro OP", text="Numéro OP", anchor="center")
self.tree.heading(column="Type Hélicoptère",text="Type Hélicoptère", anchor="center")
for self.k in range(8, 50):
print(self.k)
self.tree.column(column=str(self.k), width=150, stretch=tk.NO)
self.tree.heading(column=str(self.k), text="Semaine "+str(self.k), anchor=tk.W)
您好,尝试制作具有不同列的 Treeview。 其中七列已定义,所有其他列都是使用循环创建的。 我知道如何使用循环创建列,我知道如何手动创建列,但我不知道如何同时在同一个 Treeview 上创建列。
这是我的代码:
# coding:utf-8
import tkinter as tk
from tkinter import Tk, ttk
class Tableau(Tk):
def __init__(self):
super().__init__()
self.title("My Treeview")
app_width = 1050
app_height = 600
screnn_width = self.winfo_screenwidth()
screnn_heigth = self.winfo_screenheight()
x = (screnn_width / 2) - (app_width / 2)
y = (screnn_heigth / 2) - (app_height / 2)
self.geometry(f'{app_width}x{app_height}+{int(x)}+{int(y)}')
# -------------------------------------------Configurer la page--------------------------------------------
self.config(background="azure")
self.resizable(0, 0)
self.focus_force()
# Ajouter un style
self.style = ttk.Style()
# Choisir un theme
self.style.theme_use('default')
# Configure treeview
self.style.configure("Treeview",
background="#D3D3D3",
foreground="black",
rowheight=25,
fieldbackground="#D3D3D3")
# Changer couleur
self.style.map('Treeview',
background=[('selected', '#347083')])
self.frame = tk.Frame(self)
self.frame.pack(pady=10)
self.tree_scroll_horizontal = tk.Scrollbar(
self.frame, orient='horizontal')
self.tree_scroll_horizontal.pack(side='bottom', fill='x')
self.tree = ttk.Treeview(
self.frame, xscrollcommand=self.tree_scroll_horizontal.set, columns=())
self.tree.pack()
self.tree_scroll_horizontal.config(command=self.tree.xview)
for self.k in range(8, 50):
print(self.k)
self.tree["columns"] = ("ID", "Programme", "Date de début", "Date de fin","Effectif nécessaire", "Numéro OP", "Type Hélicoptère", list(range(8, 50)))
self.tree.column(column="#0", width=0, stretch="no")
self.tree.column(column="ID", anchor="center", width=140)
self.tree.column(column="Programme", anchor="center", width=140)
self.tree.column(column="Date de début", anchor="center", width=140)
self.tree.column(column="Date de fin", anchor="center", width=140)
self.tree.column(column="Effectif nécessaire", anchor="center", width=150)
self.tree.column(column="Numéro OP", anchor="center", width=150)
self.tree.column(column="Type Hélicoptère", anchor="center", width=150)
self.tree.column(column=(str(self.k)), width=150, stretch=tk.NO)
self.tree.heading(column="#0", text="", anchor="w")
self.tree.heading(column="ID", text="ID", anchor="center")
self.tree.heading(column="Programme", text="Programme", anchor="center")
self.tree.heading(column="Date de début", text="Date de début", anchor="center")
self.tree.heading(column="Date de fin", text="Date de fin", anchor="center")
self.tree.heading(column="Effectif nécessaire",text="Effectif nécessaire", anchor="center")
self.tree.heading(column="Numéro OP", text="Numéro OP", anchor="center")
self.tree.heading(column="Type Hélicoptère",text="Type Hélicoptère", anchor="center")
self.tree.heading(column= (str(self.k)),text=("Semaine " + str(self.k)), anchor=tk.W)
self.tree.tag_configure('oddrow', background="white")
self.tree.tag_configure('evenrow', background="lightblue")
if __name__ == "__main__":
app = Tableau()
app.mainloop()
我收到此错误:_tkinter.TclError:列索引 8 越界
关注这一行:第 68 行,在 init self.tree.column(列=(str(self.k)),宽度=150,拉伸=tk.NO)
那么如何在同一个树视图上同时创建这些列,而不用相同的方法来做到这一点。
注意下面一行:
self.tree["columns"] = ("ID", "Programme", "Date de début", "Date de fin","Effectif nécessaire", "Numéro OP", "Type Hélicoptère", list(range(8, 50)))
会将一个包含 8 个项目的元组(最后一项是列表)分配给 self.tree["columns"]
。所以索引是 0 到 7,当您尝试访问索引 8 中的项目时会引发异常。
正确的语法是:
self.tree["columns"] = ["ID", "Programme", "Date de début", "Date de fin", "Effectif nécessaire", "Numéro OP", "Type Hélicoptère"] + list(range(8, 50))
并且这一行应该放在for循环之前(包括其他一些行):
self.tree["columns"] = ["ID", "Programme", "Date de début", "Date de fin", "Effectif nécessaire", "Numéro OP", "Type Hélicoptère"] + list(range(8, 50))
self.tree.column(column="#0", width=0, stretch="no")
self.tree.column(column="ID", anchor="center", width=140)
self.tree.column(column="Programme", anchor="center", width=140)
self.tree.column(column="Date de début", anchor="center", width=140)
self.tree.column(column="Date de fin", anchor="center", width=140)
self.tree.column(column="Effectif nécessaire", anchor="center", width=150)
self.tree.column(column="Numéro OP", anchor="center", width=150)
self.tree.column(column="Type Hélicoptère", anchor="center", width=150)
self.tree.heading(column="#0", text="", anchor="w")
self.tree.heading(column="ID", text="ID", anchor="center")
self.tree.heading(column="Programme", text="Programme", anchor="center")
self.tree.heading(column="Date de début", text="Date de début", anchor="center")
self.tree.heading(column="Date de fin", text="Date de fin", anchor="center")
self.tree.heading(column="Effectif nécessaire",text="Effectif nécessaire", anchor="center")
self.tree.heading(column="Numéro OP", text="Numéro OP", anchor="center")
self.tree.heading(column="Type Hélicoptère",text="Type Hélicoptère", anchor="center")
for self.k in range(8, 50):
print(self.k)
self.tree.column(column=str(self.k), width=150, stretch=tk.NO)
self.tree.heading(column=str(self.k), text="Semaine "+str(self.k), anchor=tk.W)