Python Tkinter Tix: как использовать ScrolledWindow с сеткой в ​​Tix NoteBook - PullRequest
1 голос
/ 04 апреля 2010

Я добавляю несколько виджетов в рамку, которая находится в tix.NoteBook. Когда в окно помещается слишком много виджетов, я хочу использовать полосу прокрутки, поэтому я помещаю tix.ScrolledWindow внутри этого фрейма и вместо этого добавляю свои виджеты в это ScrolledWindow.

Проблема в том, что при использовании менеджера геометрии grid () появляется полоса прокрутки, но она не работает (полоса перетаскивания занимает всю полосу прокрутки).

from Tkinter import *
import Tix

class Window:

    def __init__(self, root):

        self.labelList = []
        self.notebook = Tix.NoteBook(root, ipadx=3, ipady=3) 
        self.notebook.add('sheet_1', label="Sheet 1", underline=0) 
        self.notebook.add('sheet_2', label="Sheet 2", underline=0)
        self.notebook.add('sheet_3', label="Sheet 3", underline=0)
        self.notebook.pack()
        #self.notebook.grid(row=0, column=0)

        tab1=self.notebook.sheet_1
        tab2=self.notebook.sheet_2
        tab3=self.notebook.sheet_3



        self.myMainContainer = Frame(tab1)
        self.myMainContainer.pack()
        #self.myMainContainer.grid(row=0, column=0)

        scrwin = Tix.ScrolledWindow(self.myMainContainer, scrollbar='y') 
        scrwin.pack()
        #scrwin.grid(row=0, column=0) 
        self.win = scrwin.window


        for i in range (100):
            self.labelList.append((Label(self.win)))
            self.labelList[-1].config(text= "Bla", relief = SUNKEN)
            self.labelList[-1].grid(row=i, column=0, sticky=W+E)

root = Tix.Tk()
myWindow = Window(root)

root.mainloop()

Всякий раз, когда я меняю хотя бы один из менеджеров геометрии с pack() на grid(), возникает проблема. (На самом деле, я бы предпочел использовать grid() для всех контейнеров.)

Когда я не использую виджет NoteBook, проблема также не возникает. Все остальные примеры здесь, похоже, основаны на pack(). Есть идеи?
Большое спасибо,
Сано

1 Ответ

2 голосов
/ 08 апреля 2010

Я решил это без использования «tx.scrolledWindow». Вместо этого я выбрал автоматическую полосу прокрутки, предложенную Фредом Лундом здесь . Основной проблемой была адаптация к виджету NoteBook. Сначала я попытался поместить полосу прокрутки в корень, чтобы они окружали все окно. Теперь я хотел менять хук для полосы прокрутки всякий раз, когда менял вкладку, но «raisecmd» в Notebook не работал. Затем я подумал об использовании события configure на каждой вкладке - каждый раз, когда открывается новая вкладка, ее размер изменяется и вызывается configure.
Ну, после долгих попыток, не будучи удовлетворенным, я изменил свой подход и поместил полосы прокрутки внутри вкладок. Вкладки и все подконтейнеры должны получить настройки «grid_columnconfigure (0, weight = 1)» и «grid_rowconfigure (0, weight = 1)», иначе они не будут расти вместе с вкладками.

...