Python,Tkinter:带有条目小部件的画布上的滚动条

时间:2012-07-11 09:49:55

标签: python tkinter

编辑:对不起,在我问之前我应该​​搜索更多,因为我现在找到了解决问题的方法。链接:Adding a scrollbar to a group of widgets in Tkinter

我正在尝试将画布添加到Tkinter GUI,其中包含文件中文本的条目小部件被添加到网格中。文件中的文本量往往很大,所以我需要添加一个滚动条。

条目窗口小部件按照它们应该的方式添加到画布中,我已经独立测试了滚动条,它工作正常 - 除非添加了条目窗口小部件。当我这样做时,滚动条消失。

以下是画布和滚动条的代码:

    groupfr = Frame(self.labelll, width = 200, height = 1000)
    groupfr.pack_propagate(0)
    groupfr.pack(fill='both', side='left')

    canvasgroup = Pmw.Group(groupfr, tag_text= 'canvasgroup')   
    canvasgroup.pack(fill = 'both', expand = 1, padx = 1, pady = 1)

    self.canvas = Tkinter.Canvas(canvasgroup.interior(), width = 200,
                                 height = 1000, bg = 'white')

    self.canvas.config(scrollregion=(0,0,20,1000))
    self.sbar = Tkinter.Scrollbar(self.canvas)
    self.sbar.config(command=self.canvas.yview)

    self.canvas.config(yscrollcommand=self.sbar.set)

    self.sbar.pack(side='right', fill='y')

    self.canvas.pack_propagate(0)
    self.canvas.pack(side = 'left', fill = 'y', expand = 'no')

我为可怕的代码道歉。然而,这是真正的问题开始的地方:

for items in linematch:
    items = items.split('=')
    list_of_lists.append(items)

    columncount = 0
    rowcount = 0

    for items in list_of_lists:
        rowcount = rowcount + 1
        columncount = 0

        for idx, (words) in enumerate(zip(items)):
            self.canvas.pack_propagate(0)
            colcnt = colcnt + 1
            idx = Tkinter.Entry(self.canvas)
            idx.grid(row=rowcount, column=columncount)
            idx.insert(0, words)

代码获取文件输入并将每行放入两个项目的列表中,这两个项目本身附加到另一个列表。这个列表列表用于这样的条目小部件,每个单词(和翻译)都在他们自己的条目小部件中:

word translation
word translation

等。 (不知道这些信息有多重要。)

当添加条目小部件时,有没有人知道滚动条消失的原因?

由于

1 个答案:

答案 0 :(得分:2)

您必须使用canvas create_window方法将小部件添加到画布。如果您使用packgrid,则他们不会成为画布的一部分,因此不会受到滚动条的影响。