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

Python ttk滚动条错误作为Toplevel()的子级,但作为Tk()的子级,python,tkinter,ttk,Python,Tkinter,Ttk,我从web上获取了一个代码示例,它作为创建为Tk()的根窗口的子窗口工作。当我试图将它概括为Toplevel()的子对象时,我得到一个错误,指示您无法将滚动条放入Toplevel().Frame()中。我不明白为什么会有这种差异,因为Tk()和Toplevel()应该会产生类似的结果 确切的错误消息是: _tkinter.TclError:无法将.19084144放入其中.18651952.19084112 或无法将滚动条放在Toplevel()中。Frame()中 我用stackoverflo

我从web上获取了一个代码示例,它作为创建为Tk()的根窗口的子窗口工作。当我试图将它概括为Toplevel()的子对象时,我得到一个错误,指示您无法将滚动条放入Toplevel().Frame()中。我不明白为什么会有这种差异,因为Tk()和Toplevel()应该会产生类似的结果

确切的错误消息是:

_tkinter.TclError:无法将.19084144放入其中.18651952.19084112 或无法将滚动条放在Toplevel()中。Frame()中


我用stackoverflow广泛地学习了很多,非常感谢这里难以置信的专业知识财富。坦率地说,我很尴尬,我没能弄明白这一点。感谢您期待您提供的任何帮助。

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

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

您能否显示给出您报告的确切错误的代码行?我不确定我是否看到了任何会导致该错误的代码。另外,一行代码只会给出一个错误,所以当你说它给出两个不同错误中的一个时,不清楚你的意思是什么。显示准确的堆栈跟踪可能会有所帮助。@BryanOakley正是这样。正确的代码行是
vsb=Scrollbar(parent,orient=“vertical”,command=self.tree.yview)
。布莱恩,我将借此机会提到,你的回答对我(和其他人)的帮助远远超过了人们对你的感激之情。谢谢你,克里斯。你能展示一下你报告的错误代码行吗?我不确定我是否看到了任何会导致该错误的代码。另外,一行代码只会给出一个错误,所以当你说它给出两个不同错误中的一个时,不清楚你的意思是什么。显示准确的堆栈跟踪可能会有所帮助。@BryanOakley正是这样。正确的代码行是
vsb=Scrollbar(parent,orient=“vertical”,command=self.tree.yview)
。布莱恩,我将借此机会提到,你的回答对我(和其他人)的帮助远远超过了人们对你的感激之情。谢谢你,克里斯。
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()