我想在 Tkinter 的文本区域上有一个滚动条,但不确定以下代码有什么问题:

问题描述 投票:0回答:1
            self.myfrm=Frame(nb, name=self.wzsgclass)
            self.myfrm.pack()
            self.sbtn = Button(self.myfrm, text='Update', underline=0,
                    command=self.update)
            self.sbtn.pack(anchor=NW, padx=7, pady=5)
            #self.txtarea=Label(self.myfrm, justify=LEFT, ancticky=W, pady=or=N, text=self.rslt)
            self.txtarea=Text(self.myfrm, width=800, height=600)
            self.txtarea.pack()
            self.txtarea.insert('3.0',self.rslt)
            self.txtarea.bind("<Key>", lambda e: "break")
            self.vscroll = Scrollbar(self.myfrm, orient=VERTICAL, command=self.txtarea.yview)
            self.txtarea['yscroll'] = self.vscroll.set
            self.vscroll.pack(side='right', fill='y')

我可以看到按钮和文本区域,但没有滚动条。 预先感谢您的帮助。

tkinter
1个回答
0
投票

pack
的工作原理是将对象放置在可用的剩余空间中。当您不带参数执行
self.txtarea.pack()
时,它与
self.txtarea.pack(side="top")
相同。您打包的任何其他小部件将位于此小部件的下方。

因为您先打包了文本小部件,所以它用完了所有剩余空间。如果还有任何可见空间,它将位于文本小部件下方。如果您的窗口具有固定大小,则在打包文本小部件后可能没有任何可用的可见空间。如果窗口足够大,您会看到文本小部件下方的滚动条。

pack

小部件的顺序很重要,因为打包的每个小部件都会删除一定量的空间,并且任何后续调用只能影响剩余空间。如果您尝试打包对于空间来说太大的小部件(例如:如果您有固定的窗口大小),
pack
将开始将窗口缩小到最小尺寸,然后最终完全剪切小部件。它以与小部件打包的相反顺序执行此操作。由于滚动条是最后被打包的,如果没有空间,它是第一个被删除的。

有关加壳算法的明确描述,请参阅官方 tcl/tk 文档中的

加壳算法

© www.soinside.com 2019 - 2024. All rights reserved.