【问题标题】:Python Treeview scrollbarPython Treeview 滚动条
【发布时间】:2017-06-12 04:23:53
【问题描述】:

我的环境是使用 Python 64 位 3.4 的 Windows 7。我正在尝试将滚动条附加到树视图小部件。我已经尝试了几个版本,但无法让它工作。到目前为止我尝试过的:

# treeview example
from tkinter import ttk
from tkinter import *

# Create instance
win = Tk()

# Add a title       
    win.title("Treeview Test")

# Add a treeview
    tree = ttk.Treeview(win,selectmode='browse')
    vsb = ttk.Scrollbar(orient="vertical",command=tree.yview)
    tree.configure(yscrollcommand=vsb.set)

    tree.place(x = 30, y = 95)
    tree["columns"] = ("1", "2")
    tree['show'] = 'headings'
    tree.column("1", width=100, anchor='c')
    tree.column("2", width=100, anchor='c')
    tree.heading("1", text="Account")
    tree.heading("2", text="Type")
    tree.insert("",'end',text="L1",values=("Big1","Best"))
    tree.insert("",'end',text="L2",values=("Big2","Best"))
    tree.insert("",'end',text="L3",values=("Big3","Best"))
    tree.insert("",'end',text="L4",values=("Big4","Best"))
    tree.insert("",'end',text="L5",values=("Big5","Best"))
    tree.insert("",'end',text="L6",values=("Big6","Best"))
    tree.insert("",'end',text="L7",values=("Big7","Best"))
    tree.insert("",'end',text="L8",values=("Big8","Best"))
    tree.insert("",'end',text="L9",values=("Big9","Best"))
    tree.insert("",'end',text="L10",values=("Big10","Best"))
    tree.insert("",'end',text="L11",values=("Big11","Best"))
    tree.insert("",'end',text="L12",values=("Big12","Best"))

# Set Window Form Size and disable resizing
    win.minsize(width=1200,height=600)
    win.resizable(width=0,height=0)  

# Event Loop
    win.mainloop()
    quit()

【问题讨论】:

  • “无法正常工作”是什么意思?它有什么作用,与您的预期有何不同?
  • 你在哪里place()你的滚动条?我没看到。
  • 滚轮无需任何代码即可工作...省去了很多麻烦。

标签: python tkinter treeview scrollbar


【解决方案1】:

创建小部件后,您需要在 Tk 窗口上放置或布置小部件。 tkinter 中可用的布局管理器是 grid、pack 和 place。检查它们并将它们添加到您的小部件中。

【讨论】:

    【解决方案2】:

    你必须在窗口中place()你的滚动条。

    from tkinter import ttk
    import tkinter as tk
    
    win = tk.Tk()
    win.minsize(width=300, height=400)
    win.resizable(width=0, height=0)
    
    tree = ttk.Treeview(win, selectmode='browse')
    tree.place(x=30, y=95)
    
    vsb = ttk.Scrollbar(win, orient="vertical", command=tree.yview)
    vsb.place(x=30+200+2, y=95, height=200+20)
    
    tree.configure(yscrollcommand=vsb.set)
    
    tree["columns"] = ("1", "2")
    tree['show'] = 'headings'
    tree.column("1", width=100, anchor='c')
    tree.column("2", width=100, anchor='c')
    tree.heading("1", text="Account")
    tree.heading("2", text="Type")
    tree.insert("",'end',text="L1",values=("Big1","Best"))
    tree.insert("",'end',text="L2",values=("Big2","Best"))
    tree.insert("",'end',text="L3",values=("Big3","Best"))
    tree.insert("",'end',text="L4",values=("Big4","Best"))
    tree.insert("",'end',text="L5",values=("Big5","Best"))
    tree.insert("",'end',text="L6",values=("Big6","Best"))
    tree.insert("",'end',text="L7",values=("Big7","Best"))
    tree.insert("",'end',text="L8",values=("Big8","Best"))
    tree.insert("",'end',text="L9",values=("Big9","Best"))
    tree.insert("",'end',text="L10",values=("Big10","Best"))
    tree.insert("",'end',text="L11",values=("Big11","Best"))
    tree.insert("",'end',text="L12",values=("Big12","Best"))
    
    win.mainloop()
    

    但是place()需要手动计算xy。使用更方便pack()

    from tkinter import ttk
    import tkinter as tk
    
    win = tk.Tk()
    win.resizable(width=0, height=0)
    
    tree = ttk.Treeview(win, selectmode='browse')
    tree.pack(side='left')
    
    vsb = ttk.Scrollbar(win, orient="vertical", command=tree.yview)
    vsb.pack(side='right', fill='y')
    
    tree.configure(yscrollcommand=vsb.set)
    
    tree["columns"] = ("1", "2")
    tree['show'] = 'headings'
    tree.column("1", width=100, anchor='c')
    tree.column("2", width=100, anchor='c')
    tree.heading("1", text="Account")
    tree.heading("2", text="Type")
    tree.insert("",'end',text="L1",values=("Big1","Best"))
    tree.insert("",'end',text="L2",values=("Big2","Best"))
    tree.insert("",'end',text="L3",values=("Big3","Best"))
    tree.insert("",'end',text="L4",values=("Big4","Best"))
    tree.insert("",'end',text="L5",values=("Big5","Best"))
    tree.insert("",'end',text="L6",values=("Big6","Best"))
    tree.insert("",'end',text="L7",values=("Big7","Best"))
    tree.insert("",'end',text="L8",values=("Big8","Best"))
    tree.insert("",'end',text="L9",values=("Big9","Best"))
    tree.insert("",'end',text="L10",values=("Big10","Best"))
    tree.insert("",'end',text="L11",values=("Big11","Best"))
    tree.insert("",'end',text="L12",values=("Big12","Best"))
    
    win.mainloop()
    

    您始终可以将TreeviewScrollbar 放在Frame 中,然后将带有place()pack()grid() 的框架移到更好的位置。

    【讨论】:

      【解决方案3】:
      import tkinter as tk
      from tkinter.ttk import Treeview, Scrollbar
      
      top = tk.Tk()
      top.geometry('1400x800')
      top.configure(background="#f7f7f7")
      
      # treeview initialization
      treeview = Treeview(top)
      
      # scrollbars
      vsb = Scrollbar(top, orient="vertical", command=treeview.yview)
      vsb.place(relx=0.978, rely=0.175, relheight=0.713, relwidth=0.020)
      
      hsb = Scrollbar(top, orient="horizontal", command=treeview.xview)
      hsb.place(relx=0.014, rely=0.875, relheight=0.020, relwidth=0.965)
      
      treeview.configure(yscrollcommand=vsb.set, xscrollcommand=hsb.set)
      

      也许这对你有帮助。

      【讨论】:

      • 您能否详细说明您的答案?
      猜你喜欢
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      相关资源
      最近更新 更多