Python ttk 滚动条错误作为 Toplevel() 的子级,但作为 Tk() 的子级工作

标签 python tkinter ttk

我从网上获取了一个代码示例,它作为作为 T​​k() 创建的根窗口的子窗口工作。当我尝试将其概括为 Toplevel() 的子级时,我收到一条错误,表明您无法将滚动条放入 Toplevel().Frame() 中。我不明白为什么会出现这种差异,因为 Tk() 和 Toplevel() 应该会产生相似的结果。

确切的错误消息是:

_tkinter.TclError: can't put .19084144 inside .18651952.19084112 or... can't put scrollbar inside Toplevel().Frame()

from tkinter import *
from tkinter.ttk import *

class columnList(object):
    def __init__(self,parent,header,dataList):
        self.tree = None
        self._setup_widgets(parent,header)
        self._build_tree(header,dataList)

    def _setup_widgets(self,parent,header):
        treeFrame = Frame(parent)
        treeFrame.pack(fill='both', expand=True)
        # create a treeview with a vertical scrollbar
        self.tree = Treeview(treeFrame, columns=header, show="headings")
        vsb = Scrollbar(orient="vertical",command=self.tree.yview)
        self.tree.configure(yscrollcommand=vsb.set)
        self.tree.grid(column=0, row=0, sticky='nsew', in_=treeFrame)
        vsb.grid(column=1, row=0, sticky='ns', in_=treeFrame)
        treeFrame.grid_columnconfigure(0, weight=1)
        treeFrame.grid_rowconfigure(0, weight=1)

    def _build_tree(self,header,dataList):
        for col in header:
            self.tree.heading(col, text=col.title())
        for item in dataList:
            self.tree.insert('', 'end', values=item)
# the test data ...
oil_header = ['oil', 'filter', 'cost']
oil_list = [
('synthetic', 'paper', '63.38') ,
('natural', 'reusable', '47.59') ]
car_header = ['car', 'repair', 'cost', 'code']
car_list = [
('Hyundai', 'brakes', '273.80', '34') ,
('Honda', 'light', '85.70', '78')]

root = Tk()
top = Toplevel()

# this succeeds
invoiceMenu = columnList(root,car_header,car_list)
# this fails as
# _tkinter.TclError: can't put .19084144 inside .18651952.19084112
#   or... can't put scrollbar inside Toplevel().Frame()
oilChangeMenu = columnList(top,oil_header,oil_list)
root.mainloop()

我广泛使用了 stackoverflow,学到了很多东西,并且非常欣赏这里令人难以置信的丰富的专业知识。坦白说,我很尴尬,因为我无法弄清楚这一点。感谢您提供的任何帮助。

最佳答案

您的问题中没有足够的细节可以确定,但问题可能源于您在创建滚动条时没有给出 parent 参数。这意味着滚动条将始终在根窗口中创建。如果您随后尝试将其放置在另一个顶层,您将收到类似于您报告的错误。

关于Python ttk 滚动条错误作为 Toplevel() 的子级,但作为 Tk() 的子级工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19531717/

相关文章:

python - 在 Tkinter 中使用鼠标事件绘制矩形

python - ttk.Separator 设置长/宽

python - 将对象连接到 Treeview 小部件中的项目

python - 在 ttk/python 中更改 Label 小部件的填充颜色

python - 如何使用 pandas 使用 python 将每 N 个值的列表拆分为数据框列和行

python - 假设 atan2(0,0) 返回 0 是否安全?

python - 从字典中提取重复值

python - Google App Engine 上的 Python 视频转换

python - 如何在调整/缩小 tkinter 应用程序窗口时保持小部件可见

python-3.x - 如何在没有 root 的情况下从源代码构建 Python 3.5.2