Python Tkinter Tix:如何在Tix NoteBook中使用带有网格的ScrolledWindow

时间:2010-04-04 18:28:13

标签: python grid scrolledwindow tix

我正在向位于tix.NoteBook的Frame中添加几个小部件。如果窗口中有太多小部件,我想使用滚动条,所以我将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 个答案:

答案 0 :(得分:2)

我在不使用'tix.scrolledWindow'的情况下解决了这个问题。相反,我选择Fred Lundh here建议的自动滚动条。 主要问题是适应NoteBook小部件。首先,我尝试将滚动条放到根部,以便它们围绕整个窗口。现在,每当我更改选项卡时,我都想更改滚动条的挂钩,但笔记本的'raisecmd'不起作用。接下来,我想到在每个选项卡上使用configure事件 - 无论何时引发新选项卡,其大小都会更改并调用configure 好吧,经过多次尝试而没有得到满足后,我改变了我的方法并将选项卡中的滚动条放在中。选项卡和所有子容器必须获得'grrid_columnconfigure(0,weight = 1)'和'grid_rowconfigure(0,weight = 1)'设置,否则它们不会随标签一起增长。