Python Tkinter中扩展列的问题

Python Tkinter中扩展列的问题,python,tkinter,treeview,scrollbar,Python,Tkinter,Treeview,Scrollbar,下面的代码应该在树视图中显示数字列表, TreeView的列宽应该始终保持不变,并且它不应该扩展 如果某个元素不适合树状结构,请单击下面的水平滚动条 树视图应该被激活,它应该允许用户滑动内容 柱的左侧或右侧 同时,滚动条下的进度条应显示进度百分比,包括 在PrimeStBar中间的百分比文本,它应该正常工作,而不会使GUI窗口的其他组件扩展或改变大小。 总结一下,下面的代码有两个问题,我放弃了尝试在线提供的不同解决方案 (1) 水平滚动条不能正常工作,我尝试了不同的宽度、最小宽度和拉伸组合,使滚

下面的代码应该在树视图中显示数字列表, TreeView的列宽应该始终保持不变,并且它不应该扩展

如果某个元素不适合树状结构,请单击下面的水平滚动条 树视图应该被激活,它应该允许用户滑动内容 柱的左侧或右侧

同时,滚动条下的进度条应显示进度百分比,包括 在PrimeStBar中间的百分比文本,它应该正常工作,而不会使GUI窗口的其他组件扩展或改变大小。

总结一下,下面的代码有两个问题,我放弃了尝试在线提供的不同解决方案

(1) 水平滚动条不能正常工作,我尝试了不同的宽度、最小宽度和拉伸组合,使滚动条工作,但没有一个有效

(2) 当我对treeview使用stretch=tk.YES以使滚动条工作时, progressbar标签(文本)的更新会强制树视图无理由展开

非常感谢您对共同解决这两个问题的任何帮助。 我正在Win10机器上使用Python 3.8.6(64位)/Tkinter 8.6.9

import tkinter as tk
from tkinter import ttk

class TreeviewTest(ttk.Frame):
    def __init__(self, container, controller):
        super().__init__(container)
        self.list_num = ttk.Treeview(self, columns=("N"), show="tree headings", 
                                     height=20, selectmode="none")
        self.list_num.heading(text="#", column=0, anchor=tk.W)
        self.list_num["show"] = "headings"
        self.list_num.column("#1",width=30 , minwidth=35, stretch=tk.YES)
        self.refresh_csv_list()
        self.list_num.grid(row=0, column=0, sticky="ew")

        self.text = tk.Label(self, text="Sometext")
        self.text.grid(row=0, column=1)

        self.value = tk.DoubleVar()
        self.style = ttk.Style()
        self.style.layout("text.Horizontal.TProgressbar", 
            [("Horizontal.Progressbar.trough",
            {"children": [("Horizontal.Progressbar.pbar",
                            {"side": "left", "sticky": "ns"})],
                "sticky": "nswe"}),
            ("Horizontal.Progressbar.label", {"sticky": ""})])

        self.h_list_num_scrollbar = ttk.Scrollbar(self, orient=tk.HORIZONTAL, command=self.list_num.xview)
        self.h_list_num_scrollbar.grid(row=1, column=0, sticky="ew", columnspan=1)
        self.list_num.configure(xscrollcommand = self.h_list_num_scrollbar.set)

        self.pbar = ttk.Progressbar(self, orient="horizontal", length=300, maximum =100, 
                                    variable=self.value, style="text.Horizontal.TProgressbar")
        self.pbar.grid(row=2, column=0, sticky="EW", pady=8, padx=3, columnspan=3)
        
        self.update_progressbar(reset=True)
        self.increment()

    def increment(self):
        self.update_progressbar(amount = 0.5)
        self.after(20, self.increment)        
        
    def update_progressbar(self, amount=0, reset=False):
        if reset:
            new_value = 0
        else:
            new_value = self.value.get() + amount
            if new_value < 0:
                new_value = 0
            if new_value > 100:
                new_value = 100
        self.value.set(new_value)        
        self.style.configure(style="text.Horizontal.TProgressbar", 
                             text="{:.1f} %".format(self.value.get()))        
        

    def refresh_csv_list(self):
        for i in range(50001000,50009000):
            tg_num = f"tg_n__{i}"
            self.list_num.insert("",i, text="",values=(str(i),) , tags=(tg_num,))


class MainPage(tk.Tk):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.minsize(250,250)        
        self.title("Isolated GUI")
        self.frames = dict()

        container = ttk.Frame(self)
        container.grid(padx=10, pady=10)
        container.columnconfigure(0, weight=1)        
        
        frame_tree_view = TreeviewTest(container, self)
        self.frames[TreeviewTest] = frame_tree_view
        frame_tree_view.grid(row=0, column=0, sticky="NSEW")
        self.show_frame(TreeviewTest)
    

    def show_frame(self, container):
        frame = self.frames[container]
        frame.tkraise()


root = MainPage()
root.mainloop()

将tkinter作为tk导入
从tkinter导入ttk
类树视图测试(ttk.Frame):
定义初始化(自身、容器、控制器):
super().\uuuu init\uuuu(容器)
self.list_num=ttk.Treeview(self,columns=(“N”),show=“树标题”,
高度=20,选择mode=“无”)
self.list_num.heading(text=“#”,column=0,anchor=tk.W)
self.list_num[“显示”]=“标题”
self.list_num.column(“#1”,width=30,minwidth=35,stretch=tk.YES)
self.refresh\u csv\u list()
self.list_num.grid(行=0,列=0,sticky=“ew”)
self.text=tk.Label(self,text=“Sometext”)
self.text.grid(行=0,列=1)
self.value=tk.DoubleVar()
self.style=ttk.style()
self.style.layout(“text.Horizontal.TProgressbar”,
[(“水平进度条槽”,
{“children”:[(“Horizontal.Progressbar.pbar”,
{“side”:“left”,“sticky”:“ns”}],
“粘性”:“nswe”}),
(“Horizontal.Progressbar.label”,{“sticky”:“})])
self.h\u list\u num\u scrollbar=ttk.scrollbar(self,orient=tk.HORIZONTAL,command=self.list\u num.xview)
self.h\u list\u num\u scrollbar.grid(行=1,列=0,sticky=“ew”,列span=1)
self.list\u num.configure(xscrolllcommand=self.h\u list\u num\u scrollbar.set)
self.pbar=ttk.Progressbar(self,orient=“horizontal”,长度=300,最大值=100,
变量=self.value,style=“text.Horizontal.TProgressbar”)
self.pbar.grid(行=2,列=0,sticky=“EW”,pady=8,padx=3,列span=3)
self.update\u progressbar(重置=真)
自我增值()
def增量(自):
自我更新进度条(金额=0.5)
自后(20,自增)
def update_progressbar(自身,金额=0,重置=False):
如果重置:
新值=0
其他:
新值=self.value.get()+金额
如果新的_值<0:
新值=0
如果新的_值>100:
新的_值=100
self.value.set(新值)
self.style.configure(style=“text.Horizontal.TProgressbar”,
text=“{.1f}%.”格式(self.value.get())
def刷新csv列表(自我):
对于范围(5000100050009000)内的i:
tg_num=f“tg_n_{i}”
self.list_num.insert(“,i,text=”“,value=(str(i),),tags=(tg_num,))
类主页(tk.tk):
定义初始化(self,*args,**kwargs):
super()
自我管理(250250)
self.title(“独立GUI”)
self.frames=dict()
容器=ttk.帧(自身)
容器网格(padx=10,pady=10)
container.columnconfigure(0,权重=1)
框架树视图=树视图测试(容器,自身)
self.frames[TreeviewTest]=框架树视图
frame_tree_view.grid(行=0,列=0,sticky=“NSEW”)
自显示框架(TreeView测试)
def显示_框架(自身、容器):
frame=self.frames[container]
frame.tkraise()
root=MainPage()
root.mainloop()