1

我正在尝试创建一个具有可变列数的 Treeview,当列数使 TreeView 比主窗口宽时,它允许水平滚动。现在我已经实现了垂直和水平滚动条。永远不会启用水平滚动条,因为包含它的 TreeView 和 Frame 都展开以适应所有列,而多余的列会从主窗口中流出。但是,无论行数如何,TreeView 的高度都不会改变。如果有人可以帮助我模仿水平的行为,将不胜感激。

TreeView 太大,看不到垂直滚动条或水平滚动条的右端 TreeView 太大,看不到垂直滚动条或水平滚动条的右端

TreeView 适合,两个滚动条都可以看到 TreeView 适合,两个滚动条都可以看到

我试图在下面包含相关代码:

class Application(Frame):

def __init__(self, master=None):
    Frame.__init__(self, master)
    self.dora = DoraExplorer()

    self.currentDict = {}
    self.lbox_list = []
    self.prevIndex =''
    self.pack()
    self.create_widgets()

def populateTreeView(self,tabDict):
    header = tabDict['header']
    data = tabDict['data']
    self.tree["columns"] = header
    self.tree['show'] = 'headings'
    self.tree.delete(*self.tree.get_children())

    for head in header:
        self.tree.column(head, width=10, anchor='c')
        self.tree.heading(head, text=head)
    #print(data)
    for j in range(len(data)):
        row = list(data[j])
        self.tree.insert("",'end',text=str(j),values=row)

def queryAction(self):
    #self.frame.delete('1.0',END)
    d = self.dbVar.get()
    t = self.tableVar
    cf = self.query.get()
    queryResults = self.dora.runQueries(cf,d,t)

    queryText = queryResults['text']
    label = queryText['label']
    title = queryText['title']


    self.populateTreeView(queryResults['table'])
def create_widgets(self):

    self.query = StringVar()
    self.createDBMenu()
    self.search_var = StringVar()
    self.search_var.trace("w", self.update_list)
    self.scrollbar = Scrollbar(self, orient=VERTICAL)
    self.lbox = Listbox(self, width=45, height=15,yscrollcommand=self.scrollbar.set)
    self.lbox.bind('<<ListboxSelect>>',self.onselect)
    self.lbox.grid(row=4, column=1,rowspan=9, padx=10, pady=3)

    self.entry = Entry(self, textvariable=self.search_var, width=40)
    self.entry.grid(row=3, column=1, padx=10, pady=3)

    self.cRadio = Radiobutton(self,text='Count',variable=self.query,value ='countTop',indicatoron=0)
    self.cRadio.grid(row=13,column=1)

    self.fRadio = Radiobutton(self,text='Foreign',variable=self.query,value ='foreignKeys',indicatoron=0)
    self.fRadio.grid(row=14,column=1)

    self.queryButton = Button(self, text="Query", command=self.queryAction)
    self.queryButton.grid(row=9,column=2,padx=3,pady=.05)

    self.treeFrame = Frame(self,width = 300, height = 400)
    self.treeFrame.grid(row=4, column=3,columnspan=3,rowspan=9, padx=10, pady=3)
    self.treeFrame.columnconfigure(3,weight=1)

    self.tree = ttk.Treeview(self.treeFrame, selectmode='browse')
    self.tree.grid(row=1, column=0, sticky=NSEW,in_=self.treeFrame, columnspan=3, rowspan=9)
    self.tree.grid_propagate(False)
    self.scbHDirSel =Scrollbar(self.treeFrame, orient=HORIZONTAL, command=self.tree.xview)
    self.scbVDirSel =Scrollbar(self.treeFrame, orient=VERTICAL, command=self.tree.yview)
    self.scbVDirSel.grid(row=1, column=50, rowspan=50, sticky=NS, in_=self.treeFrame)
    self.scbHDirSel.grid(row=52, column=0, rowspan=2,columnspan=3, sticky=EW,in_=self.treeFrame)
    self.tree.configure(yscrollcommand=self.scbVDirSel.set, xscrollcommand=self.scbHDirSel.set) 

root = Tk()

root.title("Tk dropdown example")

app= Application(master=root)
app.mainloop()
4

1 回答 1

0

最终切换到 wxPython,因为他们的 Grid 类本身就是这样做的

简单网格

于 2018-03-01T06:30:15.697 回答