2015-07-13 2 views
1

Я разместил виджет древовидной структуры в ячейке сетки, в которой используется stick=N+S+E+W, чтобы привязать границы виджета к границам ячейки сетки. Кроме того, я установил grid_columnconfigure(0, weight=1) для родительского (корневого), чтобы изменить размеры виджетов в столбце 0 (тот, который также содержит дерево) в соответствии с размером основного окна (изменяемый по размеру). Несмотря на это, некоторые столбцы («bitrate», «status») виджета treeview не отображаются, потому что весь виджет больше, чем ячейка сетки, которая его содержит. Вот источник:tkinter: treeview больше, чем ячейка сетки

from tkinter import * 
from tkinter.ttk import * 

class MainWindow(Frame): 

    def __init__(self, parent): 

     Frame.__init__(self, parent) 
     self.parent = parent   
     self.buildUI() 

    def buildUI(self): 

     # window title 

     self.parent.title("test") 

     # window config 

     self.parent.minsize(width=600, height=320) 
     self.parent.grid_columnconfigure(0, weight=1) 
     self.parent.rowconfigure(1, weight=1) 
     self.parent.geometry("600x320") 

     # menu bar (Settings, About, Exit) 

     self.menubar = Menu(self.parent) 
     self.filemenu = Menu(self.menubar, tearoff=0) 
     self.menubar.add_cascade(label="File", menu=self.filemenu) 

     self.filemenu.add_command(label="Settings") 
     self.filemenu.add_command(label="About") 
     self.filemenu.add_separator() 
     self.filemenu.add_command(label="Exit", command=self.parent.quit) 

     self.parent.config(menu=self.menubar) 

     # entry search 

     self.entrySearch = Entry(self.parent) 
     self.entrySearch.grid(row=0, column=0, sticky=W+E) 

     # button search 

     self.buttonSearch = Button(text="Search") 
     self.buttonSearch.grid(row=0, column=1) 

     # results table 

     self.resultsTable = Treeview(self.parent) 
     self.resultsTable["columns"] = ("title", "artist", "length", "bitrate", "status") 
     self.resultsTable["show"] = "headings" # remove first empty column (id) 
     self.resultsTable.heading("title", text="Title") 
     self.resultsTable.heading("artist", text="Artist") 
     self.resultsTable.heading("length", text="Length") 
     self.resultsTable.heading("bitrate", text="Bitrate") 
     self.resultsTable.heading("status", text="Status") 
     self.resultsTable.grid(row=1, column=0, columnspan=2, sticky=N+S+E+W) 

     # bottom status bar 

     self.statusBar = Label(self.parent, text="Ready") 
     self.statusBar.grid(row=2, column=0, sticky=W) 

def main(): 

    root = Tk() 
    app = MainWindow(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 

Вот скриншот: http://i.stack.imgur.com/U1g44.png. Как видите, столбцы «bitrate» и «status» не отображаются. Их можно просмотреть только путем увеличения ширины главного окна. Я не могу понять, где проблема. Спасибо, что нашли время.

ответ

0

Виджет treeview имеет метод с именем column, который позволяет указать параметры для данного столбца. Один из вариантов: stretch, который позволяет определить, должен ли столбец растягиваться и сжиматься при изменении размера виджета. Вы также можете использовать атрибут width, чтобы указать начальный размер. Эти два сочетания должны приводить к тому, что ваше дерево будет отображаться со всеми столбцами, установленными на экране.

self.resultsTable = Treeview(self.parent) 
... 
self.resultsTable.column("title", stretch=True, width=10) 
self.resultsTable.column("artist", stretch=True, width=10) 
self.resultsTable.column("length", stretch=True, width=10) 
self.resultsTable.column("bitrate", stretch=True, width=10) 
self.resultsTable.column("status", stretch=True, width=10) 
+0

Спасибо за подсказку. Я отредактировал код, добавив: 'self.resultsTable.column (" length ", width = 50, stretch = False)', 'self.resultsTable.column (" bitrate ", width = 50, stretch = False) 'и ' self.resultsTable.column ("status", width = 50, stretch = False) '. Таким образом, «title» и «artist» автоматически расширяют свою ширину, в то время как последние три столбца имеют начальную ширину, которая соответствует размеру окна. Теперь все это подходит при изменении размера окна. Большое спасибо. – 5haffl

Смежные вопросы