Tkinter:如何在树视图中添加多列并避免类型错误
Tkinter : How to add multiple columns in a treeview and avoid typeError
我正在尝试创建一个包含很多列的 Treeview。
这是我的 class 使用树视图创建 window :
#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(50):
self.param = self.tree["columns"] + (str(self.k),)
self.tree.configure(columns=self.param)
print(self.k)
for self.j in range(50):
self.tree.column(column=(str(self.k)), width=500, stretch=tk.NO)
self.tree.heading(column= (str(self.k)), text=(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()
我在 运行 时遇到此错误:
类型错误:只能将 str(不是“元组”)连接到 str
我知道我的类型有问题,错误说这个错误发生在这里:
第 57 行,在 init self.param = self.tree["columns"] + (str(self.k),)
为了避免这个错误,我尝试添加 str
符号,但没有奏效。
由于您使用空元组作为 columns
选项创建 self.tree
,因此 self.tree["columns"]
的 return 值是空字符串而不是空元组。你可以通过在创建self.tree
之后打印self.tree["columns"]
的类型来验证它。这就是在提到的行上引发异常的原因。
其实你可以简化下面的for循环:
for self.k in range(50):
self.param = self.tree["columns"] + (str(self.k),)
self.tree.configure(columns=self.param)
print(self.k)
来自
self.tree["columns"] = list(range(50))
另外我认为for self.j in range(50)
下面的for循环
for self.j in range(50):
self.tree.column(column=(str(self.k)), width=500, stretch=tk.NO)
self.tree.heading(column= (str(self.k)), text=(str(self.k)), anchor=tk.W)
应该是for self.k in range(50)
。
我正在尝试创建一个包含很多列的 Treeview。
这是我的 class 使用树视图创建 window :
#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(50):
self.param = self.tree["columns"] + (str(self.k),)
self.tree.configure(columns=self.param)
print(self.k)
for self.j in range(50):
self.tree.column(column=(str(self.k)), width=500, stretch=tk.NO)
self.tree.heading(column= (str(self.k)), text=(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()
我在 运行 时遇到此错误: 类型错误:只能将 str(不是“元组”)连接到 str
我知道我的类型有问题,错误说这个错误发生在这里: 第 57 行,在 init self.param = self.tree["columns"] + (str(self.k),)
为了避免这个错误,我尝试添加 str
符号,但没有奏效。
由于您使用空元组作为 columns
选项创建 self.tree
,因此 self.tree["columns"]
的 return 值是空字符串而不是空元组。你可以通过在创建self.tree
之后打印self.tree["columns"]
的类型来验证它。这就是在提到的行上引发异常的原因。
其实你可以简化下面的for循环:
for self.k in range(50):
self.param = self.tree["columns"] + (str(self.k),)
self.tree.configure(columns=self.param)
print(self.k)
来自
self.tree["columns"] = list(range(50))
另外我认为for self.j in range(50)
下面的for循环
for self.j in range(50):
self.tree.column(column=(str(self.k)), width=500, stretch=tk.NO)
self.tree.heading(column= (str(self.k)), text=(str(self.k)), anchor=tk.W)
应该是for self.k in range(50)
。