如何在树视图中使用水平滚动,这里我使用树形视图来制作表格

时间:2017-10-20 06:55:08

标签: python tkinter treeview scrollbar

class table(Frame):

def __init__(self, parent,headings=None,data=None):
    Frame.__init__(self, parent,relief='ridge')
    self.parent=parent
    self.headings=headings
    self.data = data
    self.CreateUI(self.headings)
    self.LoadTable(self.data)


    self.yscrollbar = Scrollbar(self.parent,orient=VERTICAL)
    self.yscrollbar.grid(row=0,column=1,sticky = (N,S,W,E))
    self.yscrollbar.config(command=self.treeview.yview)
    self.treeview.config(yscrollcommand=self.yscrollbar.set)

    self.xscrollbar = Scrollbar(self.parent,orient=HORIZONTAL)
    self.xscrollbar.grid(row=1,column=0,sticky = (N,S,W,E))
    self.treeview.config(xscrollcommand=self.xscrollbar.set)
    self.xscrollbar.config(command=self.treeview.xview)

    self.grid(row=0,column=0)
def CreateUI(self,headings):
    tv = Treeview(self,height=20)
    if(headings==None):
        tv['columns'] = ('starttime', 'endtime', 'status')
    else:
        tv['columns'] = headings[1:]
        tv.heading("#0", text=headings[0], anchor='w')
        tv.column("#0", anchor="w")
        for i in headings[1:]:
            tv.heading(i, text=i)
            tv.column(i, anchor='center')
    tv.grid(sticky = (N,S,W,E))
    self.treeview = tv

def LoadTable(self,data):
    if(data==None):
        for i in range(100):
            self.treeview.insert('', 'end', text="first", values=('sdfa','asdfasd0','asdfasdf'))
            self.treeview.insert('', 'end', text="Second", values=('sdfa','asdfasd0','asdfasdf'))
            self.treeview.insert('', 'end', text="third", values=('sdfa','asdfasd0','asdfasdf'))
    else:
        for line in data:
            self.treeview.insert('', 'end', text=line[0], values=line[1:])

从上面的代码我用树视图创建了一个表,我的y轴滚动工作正常,但我无法在xscrollbar上工作。请帮助我,谢谢你。我附加了一个结果Treeview的图像(表格像一个)。 screeshot of my tkinter window

3 个答案:

答案 0 :(得分:0)

根据屏幕截图,您的桌子看起来没有根窗口提供的足够空间。 滚动条可能在那里,但由于表格是在右侧切割而不可见,因此您需要调整用于表格根窗口的几何管理器的属性

答案 1 :(得分:0)

def CreateUI(self,headings):
    tv = Treeview(self,height=20)
    if(headings==None):
        tv['columns'] = ('starttime', 'endtime', 'status')
    else:
        tv['columns'] = headings[1:]
        tv.heading("#0", text=headings[0], anchor='w')
    --> tv.column("#0", anchor="center",width=100,minwidth=100)
        for i in headings[1:]:
            tv.heading(i, text=i)
        --> tv.column(i, anchor='center',width=90,minwidth=100)##
    tv.pack(expand=Y)
    self.treeview = tv

这个功能的一些编辑帮助我完成了,谢谢那些尝试过的人。 我使用了树视图的额外参数,即最小宽度。 宽度和最小宽度的差异将使我们能够解决这个问题。

答案 2 :(得分:0)

您可以水平滚动树视图,重新调整colomns(在运行时,向右拖动'关闭屏幕')xscrollbar被激活,或者调整列的大小(在创建滚动条和树视图后使用事件的代码,例如按下按钮(例如当树视图被填满时),否则' .xview'什么都没有检测到

vsbx = tkinter.Scrollbar(root_search_stock, orient="horizontal")
vsbx.place(x= 40, y = 550, width = 1000)


tree = tkinter.ttk.Treeview(root_search_stock,\
                           columns=column_names,yscrollcommand=vsby.set,xscrollcommand=vsbx.set)
tree.place(x = 50, y = 300)


vsbx.config(command = tree.xview)