我想做一个程序,有一个树视图,也有能力在黑暗模式和灯光模式之间随时切换。对于不同的主题,我使用了the主题。
当主题切换时,我希望treeview不会扩展(就像其他小部件保持相同的大小一样)。
但是,每次切换主题时,树视图都会扩展一点。为什么会发生这种情况,以及如何修复这种意外的结果?
我尝试使用grid_forget()来忘记树视图,并在每次切换主题时重新对其进行网格划分,但它仍然会产生相同的结果。帧没有区别。我试着用谷歌搜索,但没有得到我的问题的结果。
它扩展的示例:
import tkinter as tk
from tkinter import ttk
from ttkthemes import ThemedTk
root = ThemedTk(theme="arc")
myTreeview = ttk.Treeview()
myTreeview.grid(row=0,column=0)
def switchToDark():
root.configure(theme="equilux")
#The method i tried
#myTreeview.grid_forget()
#myTreeview.grid(row=0,column=0)
darkButton = ttk.Button(text="Dark Mode",command=switchToDark)
darkButton.grid(row=1,column=0)
def switchToLight():
root.configure(theme="arc")
#myTreeview.grid_forget()
#myTreeview.grid(row=0,column=0)
lightButton = ttk.Button(text="Light Mode",command=switchToLight)
lightButton.grid(row=0,column=1)
root.mainloop()发布于 2021-08-07 14:08:07
我自己做了一个实际有效的解决方案,如果有人找到了不同的解决方案,请一定要分享!(注意:此解决方案目前仅适用于使用数字作为其IID的行)
首先,将valuesList初始化为全局变量:
valuesList = []接下来,每当在treeview中插入一行时,添加以下内容:
global valuesList
valuesList.append(myTreeview.item(len(myTreeview.get_children()),option='values'))基本上,myTreeview.item(len(myTreeview.get_children()),option='values')获取每一行的值元组(不包括文本和IID)。
get_children()方法返回父或根的项的IID的列表。
len(myTreeview.get_children())+1,因为这是我为每一行设置IID的方式(例如,如果为len(myTreeview.get_children()) == 2,这意味着树视图当前有两行。添加的行的IID将是3。
用于切换主题的函数:
def switchToDark():
root.configure("equilux") # change the theme
myTreeview.destroy() # destroy and reinitialise the treeview
myTreeview = ttk.Treeview()
myTreeview.grid(row=0,column=0)
# add necessary columns and headings here
idNumber = len(databaseTree.get_children())
for tupleOfValues in valuesList: # iterate through the list of tuples
idNumber += 1
databaseTree.insert(parent='',index='end',iid=idNumber,text=idNumber,values=(tupleOfValues[0],tupleOfValues[1],tupleOfValues[2],tupleOfValues[3],tupleOfValues[4]))
# the above is reinserting the original values one by one此时的valuesList示例将如下所示:
[(value1, value2, value3), (value1, value2, value3)] # a list of tuples
# row 1 values ^ row 2 values ^因此tupleOfValues将会是:
(value1, value2, value3)根据树视图的值的数量,您可能需要或多或少的tupleOfValues[i]。因为我有5个值,所以我使用tupleOfValues[4]。切换到灯光模式也是如此。
我希望这对你有帮助!
https://stackoverflow.com/questions/68466237
复制相似问题