2017-07-29 7 views
0

ボタンプレスからトップレベルウィジェットを開き、見つかったサンプルからそのフレーム内にリストを生成しようとしています。私は生成されたフレームの中にウィジェットを配置しようとすると、しかし、私は次のエラーを取得する:トップフレーム内にtkinterウィジェットを配置できません

_tkinter.TclError: can't put .!treeview inside .!errorexample.!toplevel.!mclistdemo.!frame.!frame 

私は

self.tree.grid(IN_ = F、に問題が絞られています行= 0、列= 0、粘着性= 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

ツリービューに親を与えないので、ルートウィンドウが親として存在します。ウィジェットは階層内にあり、ウィジェットは階層の別の部分に配置することはできません。

公式ドキュメントには、このようにそれを説明します

The master for each slave must either be the slave's parent (the default) or a descendant of the slave's parent. This restriction is necessary to guarantee that the slave can be placed over any part of its master that is visible without danger of the slave being clipped by its parent.

あなたはツリービューはfになりたい場合は、最も簡単な方法はfが親になるようにすることです:

self.tree = ttk.Treeview(f, ...) 
self.tree.grid(row=0, column=0, sticky=NSEW) 
関連する問題