Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用ttk.Treeview,如何使水平滚动按预期工作?_Python_Treeview_Scrollbar_Ttk - Fatal编程技术网

Python 使用ttk.Treeview,如何使水平滚动按预期工作?

Python 使用ttk.Treeview,如何使水平滚动按预期工作?,python,treeview,scrollbar,ttk,Python,Treeview,Scrollbar,Ttk,使用这个Python脚本,这是我第一次尝试学习ttk.Treeview的工作原理(autoscroll的额外副本只是用来分割水平回调和垂直回调): 对不起,多了一个窗口;Tkinter的那部分让我困惑不已 众所周知,Tk的Treeview小部件存在水平滚动问题。我刚刚就一个你可能想看的特定场景起草了一个冗长的问题,希望它能给你一些想法: import Tkinter as tk import ttk class Test(): def __init__(self, parent=None):

使用这个Python脚本,这是我第一次尝试学习
ttk.Treeview
的工作原理(autoscroll的额外副本只是用来分割水平回调和垂直回调):


对不起,多了一个窗口;Tkinter的那部分让我困惑不已

众所周知,Tk的Treeview小部件存在水平滚动问题。我刚刚就一个你可能想看的特定场景起草了一个冗长的问题,希望它能给你一些想法:
import Tkinter as tk
import ttk

class Test():
def __init__(self, parent=None):
    self.win = tk.Toplevel()
    self.win.grid_columnconfigure(0, weight=1)
    self.win.grid_rowconfigure(0, weight=1)     

    self.treeFrame = ttk.LabelFrame(self.win, text='Test Scrolling tk.Treeview')
    self.treeFrame.grid(row=0, column=0, padx=5, pady=5, sticky='nsew')
    self.treeFrame.grid_columnconfigure(0, weight=1)
    self.treeFrame.rowconfigure(0, weight=1)

    def autoscrollv(sbar, first, last):
        print 'vert first:%s, last:%s' % (first,last)
        first, last = float(first), float(last)
        if first <= 0 and last >= 1:
            sbar.grid_remove()
        else:
            sbar.grid()
        sbar.set(first, last)

    def autoscrollh(sbar, first, last):
        print 'horz first:%s, last:%s' % (first,last)           
        first, last = float(first), float(last)
        if first <= 0 and last >= 1:
            sbar.grid_remove()
        else:
            sbar.grid()
        sbar.set(first, last)

    vsb = ttk.Scrollbar(self.treeFrame, orient="vertical")
    hsb = ttk.Scrollbar(self.treeFrame, orient="horizontal")

    self.tree = ttk.Treeview(self.treeFrame, height=10, 
                             yscrollcommand=lambda f, l: autoscrollv(vsb, f, l), 
                             xscrollcommand=lambda f, l: autoscrollh(hsb, f, l))  
    self.tree.column("#0", minwidth=400, stretch=True)

    vsb['command'] = self.tree.yview
    hsb['command'] = self.tree.xview

    self.tree.grid(row=0, column=0, sticky='nsew')
    vsb.grid(column=1, row=0, sticky='ns')
    hsb.grid(column=0, row=1, sticky='ew')

    self.tree.insert('', 'end', 'xyz', text='abc'*20)
    for i in range(30):
        self.tree.insert('xyz', 'end', text='%s' % i + 'xyz'*40)

    self.win.mainloop()

if __name__ == "__main__":
    test = Test()
minwidth=tkFont.Font().measure(text)
self.tree.column('#0', minwidth=tcw)