无法在内部使用几何管理器包
Posted
技术标签:
【中文标题】无法在内部使用几何管理器包【英文标题】:Cannot use geometry manager pack inside 【发布时间】:2014-06-28 08:34:25 【问题描述】:所以我正在使用 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: cannot use geometry manager pack inside .56155888 which has been slaves by grid management on the line vertscroll.pack(side="right", fill="y", expand=False)
任何想法如何解决这个问题?
【问题讨论】:
【参考方案1】:根据the docs,不要在同一个主窗口中混用pack
和grid
:
警告:切勿在同一个主窗口中混合使用网格和打包。特金特 将愉快地度过你的余生,试图谈判一个 两位经理都满意的解决方案。与其等待,不如杀死 应用程序,然后再看看你的代码。一个常见的错误 是为某些小部件使用了错误的父级。
因此,如果您在文本框上调用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()
【讨论】:
谢谢!粘性不应该是 NSE 吗? 你可以使用NSE
,但在这种情况下我认为这并不重要。【参考方案2】:
代码的原因很简单,你不能在同一个类内或同一个框架中使用 pack 和 grid。因此,只使用一个。
【讨论】:
为什么“整个代码只有一个”?每个人都有一个目的,优点和缺点。当您同时使用这两种方法时,大多数复杂的 GUI 会更容易编写。 它可能有“整个代码”。当你制作一个复杂的 GUI 时,你会使用很多类(继承自主类,即 App)。这些类中的每一个都有自己的小部件集。因此,您可以通过划分组件在某些类中使用pack,在某些类中使用grid。 是的,我知道。我要问的是为什么你建议在整个代码中只使用一个。 你可以为不同的页面制作不同的类。然后,您可以将 pack 用于某些页面,而将 grid 用于其他页面。【参考方案3】:你不能在同一个类或同一个框架内使用pack和grid。只能使用一个
【讨论】:
以上是关于无法在内部使用几何管理器包的主要内容,如果未能解决你的问题,请参考以下文章