Tk()로 만든 루트 창의 자식으로 작동하는 코드 예제를 웹에서 가져 왔습니다. 내가 Toplevel()의 자식으로 내 목적을 위해 일반화하려고하면 스크롤바를 Toplevel(). Frame()에 넣을 수 없다는 오류가 발생합니다. 나는 왜 Tk()와 Toplevel()이 비슷한 결과를 산출했는지에 대한 이유를 알 수 없다.Python ttk Toplevel()의 자식으로 스크롤 막대 오류가 발생했지만 Tk()의 자식으로 작동합니다.
정확한 오류 메시지는 다음과 같습니다
_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()
나는 광범위하게 많은 것을 배울 유래를 사용하고 아주 많이는 여기에 전문 지식의 놀라운 재산을 주셔서 감사합니다. 솔직히, 나는 이걸 알아낼 수 없다는 것을 당황스럽게 생각합니다. 귀하가 제공 할 수있는 도움을 미리 기대해 주셔서 감사합니다.
신고하는 정확한 오류를 나타내는 코드 줄을 표시 할 수 있습니까? 나는 그 오류를 줄 수있는 코드를 보지 못했습니다. 또한 코드 줄은 하나의 오류 만 표시하므로 두 가지 오류 중 하나를 제공 할 때 어떤 의미인지 명확하지 않습니다. 정확한 스택 추적을 표시하는 것이 도움이 될 수 있습니다. –
정확히 @BryanOakley입니다. 수정 된 코드 행은 입니다. vsb = Scrollbar (parent, orient = "vertical", command = self.tree.yview) 나는 겸손하고 (어리석은) 느낌이 들었다. 나는이 기회에 브라이언 (Bryan)에 대해, 당신의 반응이 나를 (그리고 다른 사람들을) 돕기 위해 더 많은 일을했다는 점을 충분히 강조 할 것입니다. 고마워, 크리스. – Kristo