无法在内部使用几何管理器pack

45 投票
3 回答
195840 浏览
提问于 2025-04-18 06:07

我正在用tkinter库制作一个RSS阅读器,在我的一个方法里创建了一个文本框。文本框显示得很好,但当我尝试给它添加滚动条时,就出现了问题。

这是我在添加滚动条之前的代码:

   def create_text(self, root):
        self.textbox = Text(root, height = 10, width = 79, wrap = 'word')
        self.textbox.grid(column = 0, row = 0)

这是我添加滚动条后的代码:

def create_text(self, root):
        self.textbox = Text(root, height = 10, width = 79, wrap = 'word')
        vertscroll = ttk.Scrollbar(root)
        vertscroll.config(command=self.textbox.yview)
        vertscroll.pack(side="right", fill="y", expand=False)
        self.textbox.config(yscrllcommand=vertscroll.set)
        self.textbox.pack(side="left", fill="both", expand=True)
        self.textbox.grid(column = 0, row = 0)

这段代码让我遇到了一个错误:

_tkinter.TclError: 不能在已经用grid管理的地方使用pack,具体是在这一行 vertscroll.pack(side="right", fill="y", expand=False)

有没有什么办法可以解决这个问题呢?

3 个回答

2

在同一个类或者同一个窗口里,你不能同时使用pack和grid这两种布局方式。只能选一种来用。

9

这段代码的意思很简单,你不能在同一个类或者同一个窗口里同时使用pack和grid这两种布局方式。所以,你只能选择其中一种来使用。

71

根据文档,在同一个主窗口中不要混用packgrid

警告:绝对不要在同一个主窗口中混合使用gridpack。Tkinter会花费你一辈子的时间去尝试找到一个让这两种布局管理器都满意的解决方案。与其等待,不如直接关闭应用程序,重新检查你的代码。一个常见的错误是为某些控件使用了错误的父级。

所以,如果你在文本框上使用了grid,那么就不要在滚动条上使用pack


import Tkinter as tk
import ttk

class App(object):
    def __init__(self, master, **kwargs):
        self.master = master
        self.create_text()

    def create_text(self):
        self.textbox = tk.Text(self.master, height = 10, width = 79, wrap = 'word')
        vertscroll = ttk.Scrollbar(self.master)
        vertscroll.config(command=self.textbox.yview)
        self.textbox.config(yscrollcommand=vertscroll.set)
        self.textbox.grid(column=0, row=0)
        vertscroll.grid(column=1, row=0, sticky='NS')

root = tk.Tk()
app = App(root)
root.mainloop()

撰写回答