我试图从按下按钮打开一个顶级小部件,并从我找到的示例生成该框架内的列表 . 但是,当我尝试将窗口小部件放在生成的框架中时,我收到以下错误:
_tkinter.TclError: can't put .!treeview inside .!errorexample.!toplevel.!mclistdemo.!frame.!frame
我把问题缩小到了
self.tree.grid( in_=f, row = 0,column = 0,sticky = NSEW)
在_create_treeview方法中 . 删除in_命令后,将在父窗口中正确生成窗口小部件 . 我怀疑这个问题与我的父/自命名约定有关,但我仍然在努力去理解这个问题 .
我遇到的大多数问题都是类似的描述似乎是在生成窗口时尝试放置窗口小部件,但在此代码中似乎并非如此 .
from tkinter import *
from tkinter import ttk
from tkinter.font import Font
class ErrorExample(Frame):
def __init__(self, parent):
Frame.__init__(self,parent)
self.grid()
self.parent=parent
self.b4=Button(
self,
text="Load",
command=lambda: self.createWindow())
self.b4.grid()
def createWindow(self):
self.t = Toplevel(self)
MCListDemo(self)
class MCListDemo(ttk.Frame):
def __init__(self, parent, isapp=True):
ttk.Frame.__init__(self, parent.t)
self.grid()
self.isapp = isapp
self._create_widgets()
def _create_widgets(self):
if self.isapp:
self._create_demo_panel()
def _create_demo_panel(self):
demoPanel = Frame(self)
demoPanel.grid()
self._create_treeview(demoPanel)
self._load_data()
def _create_treeview(self, parent):
f = ttk.Frame(parent)
f.grid()
self.dataCols = ('country', 'capital', 'currency')
self.tree = ttk.Treeview(columns=self.dataCols,
show = 'headings')
self.tree.grid(in_=f, row=0, column=0, sticky=NSEW)
start=Tk()
ErrorExample(start)
if __name__=="__main__":
main()
1 回答
您不会将树视图设为父视图,因此它将根视窗作为父视图 . 窗口小部件位于层次结构中,窗口小部件不能放置在层次结构的不同部分中 .
官方文档描述如下:
如果您希望树视图位于
f
中,最简单的方法是使f
成为父级: