Tk() として作成されたルート ウィンドウの子として機能するコード例を Web から取得しました。Toplevel() の子として目的のために一般化しようとすると、スクロールバーを Toplevel().Frame() に配置できないというエラーが表示されます。Tk() と Toplevel() は同様の結果をもたらすはずなので、なぜ違いがあるのか わかりません。
正確なエラー メッセージは次のとおりです。
_tkinter.TclError: .19084144 を .18651952.19084112 内に配置できない、または... 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を広範囲に使用して多くのことを学び、ここにある信じられないほど豊富な専門知識に非常に感謝しています. 率直に言って、私はこれを理解できなかったことを恥ずかしく思っています。どうぞよろしくお願いいたします。