如何使用 Tkinter 将垂直滚动条附加到树视图? [英] How can I attach a vertical scrollbar to a treeview using Tkinter?

查看:23
本文介绍了如何使用 Tkinter 将垂直滚动条附加到树视图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试为 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 将垂直滚动条附加到树视图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆