2016-08-28 3 views
-3

ttkノートブックで複数のタブを自動的に生成する方法を見つけました。 http://stackoverflow.com/questions/39175898/automatic-multiple-tab-generation-with-tkinter-notebook?noredirect=1#comment65695477_39175898 しかし、今私は個々のコンテンツ、つまりウィジェットでタブを埋めるのに問題があります。私は "???"のために何が必要ですか?コメントアウトされた部分に? これを解決する方法を私に見せていただければ、とても感謝しています。個々のフレームをtkinterノートに記入する(自動タブ生成後)ウィジェット付きのタブ

from tkinter import * 
from tkinter import ttk 

### 
class MyTab(Frame): 

    def __init__(self, root, name): 
     Frame.__init__(self, root) 

     self.root = root 
     self.name = name 


### 
class Application(): 

    def __init__(self): 

     self.tabs = {'ky': 1} 

     print(self.tabs['ky']) 

     self.root = Tk() 
     self.root.minsize(300, 300) 

###  Tab generation 
     self.notebook = ttk.Notebook(self.root, width=800, height=550) 

     tab_names = ["info", "S00", "S01", "S02", "S03", "S04", "S05", "S06", "S07", "S08", "help"] 

     for i in range(0, len(tab_names)): 
      tab = MyTab(self.notebook, tab_names[i]) 
      self.notebook.add(tab, text=tab_names[i]) 

     self.button = Button(self.root, text='next ->', command=self.next_Tab).pack(side=BOTTOM) 

###  info Tab Widgets 
     #self.btn1 = Button(???, text='Info Button', command=self.next_Tab).pack(side=RIGHT) 

###  S00 Tab Widgets 
     #self.btn2 = Button(???, text="test_btn") 
     #self.btn2.pack() 

###  S01 Tab Widgets and so on... 

     self.notebook.pack(side=TOP) 

    def next_Tab(self): 
     print("next Tab -> not yet defined") 

    def run(self): 
     self.root.mainloop() 

### 

Application().run() 
+0

質問を書き直してください。あなたの求めるものが明確ではありません。ありがとう。 –

+0

@ Mr.goosberryご返信ありがとうございます。私は個々のwidgestを別のタブに配置しようとしています。 (これは、単一のタブに関しては、フォアグラウンドでアクティブになっている場合にのみ表示されるようにするためです)。タブを生成するループと組み合わせて実行される例は見つかりませんでした。そのようなウィジェットのコードがどのように見えるかは誰が知っていますか?私は "???"のために何を書くべきか分からないコメントアウトされたセクションで。うまくいけば、これはもう少し明確になりました。 – quest4stack

答えて

0

ルールは非常に単純です。ウィジェットを別のウィジェットに配置するには、別のウィジェットへの参照が必要です。直接によって、あなたが(そして、より「神託」)あなたのループをより読みやすくすることができます

tabs = {} 
for i in range(0, len(tab_names)): 
    tab = MyTab(self.notebook, tab_names[i]) 
    self.notebook.add(tab, text=tab_names[i]) 
    tabs[tab_names[i]] = tab 
... 
self.btn1 = Button(tabs["info"], ...) 

ところで:あなたのケースでは、行う簡単な事はあなたのフレームへの参照を保持するために辞書を作成することですインデックス値を繰り返し処理するのではなく、タブ名のリストを繰り返し処理します。

tabs = {} 
for tab_name in tab_names: 
    tab = MyTab(self.notebook, tab_name) 
    self.notebook.add(tab, text=tab_name) 
    tabs[tab_name] = tab 
+0

パーフェクト、まさに私が探していたものです。ありがとうたくさん:) – quest4stack

+0

私はいつも 'tab_names'を直接参照として使用しようとしましたが、これはうまくいきませんでした。あなたのアドオン辞書を使ったアイデアは、そのトリックです。 – quest4stack

関連する問題