问题描述
我一直在尝试为 tkinter 树视图附加水平和垂直滚动条.在我的主应用程序中,所有数据都来自 sql 数据库,因此我需要能够在一个单独的窗口中滚动浏览大量数据.我已经设法将树视图放置在子窗口中,但是我仍然坚持如何附加有效的滚动条.
I have been trying to attach a horizontal and vertical scrollbar for the tkinter treeview. In my main application all the data comes from a sql database so I need to be able to scroll through lots of data within a sperate window. I have managed to place the treeview within the child window, however I am still stuck on how to attach scrollbars that work.
虽然目前有一个垂直滚动条,但它似乎没有附加到树视图,也没有滚动浏览我输入的任何数据.
Although there is a vertical scrollbar at the moment it doesn't seem to be attached to the treeview and does not scroll through any data that I input.
有没有办法在我的应用程序中放置垂直和水平滚动条?
Is there a way of putting vertical and horizontal scrollbars within my application?
import Tkinter as tk
import os
import sys
import re
import ttk
from Tkinter import *
import tkFont
class application(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (app_one, app_two):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(app_one)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class app_one(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
button = ttk.Button(self, text="Page One", command=lambda: controller.show_frame(app_two))
button.pack()
class app_two(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller=controller
self.msgText = tk.StringVar()
button = ttk.Button(self, text="Open", command= self.Child_Window)
button.pack()
def Child_Window(self):
win2 = Toplevel()
new_element_header=['1st','2nd','3rd','4th']
treeScroll = ttk.Scrollbar(win2)
treeScroll.pack(side=RIGHT, fill=Y)
tree = ttk.Treeview(win2,columns=new_element_header, show="headings", yscrollcommand = treeScroll)
tree.heading("1st", text="1st")
tree.heading("2nd", text="2nd")
tree.heading("3rd", text="3rd")
tree.heading("4th", text="4th")
tree.insert("" , 0, text="Line 1", values=("1A","1b"))
tree.insert("" , 0, text="Line 2", values=("1A","1b"))
tree.insert("" , 0, text="Line 3", values=("1A","1b"))
tree.insert("" , 0, text="Line 4", values=("1A","1b"))
tree.insert("" , 0, text="Line 5", values=("1A","1b"))
tree.insert("" , 0, text="Line 6", values=("1A","1b"))
tree.insert("" , 0, text="Line 7", values=("1A","1b"))
tree.pack(side=LEFT, fill=BOTH)
treeScroll.config(command=tree.yview)
app = application()
app.wm_geometry("420x200")
app.wm_title("Test")
app.mainloop()
推荐答案
您可以将滚动条连接到 Treeview
小部件,就像连接任何其他可滚动小部件一样.
You connect scrollbars to a Treeview
widget the same as you do for any other scrollable widget.
在垂直滚动条的情况下,小部件的 yscrollcommand
属性需要设置为滚动条的 set
函数(或类似的东西)).此外,滚动条的 command
属性需要设置为树的 yview
方法(或类似的东西)
In the case of a vertical scrollbar, the yscrollcommand
attribute of the widget needs to be set to the set
function of the scrollbar (or something that works just like it). Also, the command
attribute of the scrollbar needs to be set to the yview
method of the tree (or something that works just like it)
例如:
treeScroll = ttk.Scrollbar(...)
tree = ttk.Treeview(...)
treeScroll.configure(command=tree.yview)
tree.configure(yscrollcommand=treeScroll.set)
配置水平滚动条与此类似,当然它需要绑定到 xview
方法而不是树的 yview
方法.
Configuring a horizontal scrollbar is similar, though of course it needs to be tied to the xview
method rather than the yview
method of the tree.
这篇关于如何使用 Tkinter 将垂直滚动条附加到树视图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!