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