2015-09-18 2 views
0

У меня есть код для создания ноутбука в Python Megawidgets и tkinter. Я считаю, что два блока повторяющегося кода могут быть повторены, а не метод, который я использовал, чтобы создать строку кода для каждого виджета.Итерационные компоненты tkinter

В частности, в коде как выполнить итерацию каждого атрибута страницы и настроить каждый цвет табуляции и шрифт в цикле?

код

lass TextBookGUI: 

конструктор класса

заполнит каждую страницу книги примечание

Защиту INIT (я, мастер):

#place hash tables here 

""" 
Create 5 pages on using Pmw notebook widget. 
Documenation for notebook: 
http://pmw.sourceforge.net/doc/NoteBook.html 
""" 
Pmw.initialise(master) 
self.nb = Pmw.NoteBook(master,borderwidth=2,arrownavigation=True,tabpos='n') 



self.HomeTab = self.nb.add("Welcome") 
self.nb.tab('Welcome').focus_set() 
self.StudentTab = self.nb.add("Students") 
self.BookTab = self.nb.add("Books") 
self.LoanTab = self.nb.add("Loans") 
self.HelpTab = self.nb.add("Help") 

*self.nb._pageAttrs['Welcome']['tabreqwidth'] = 200 
self.nb._pageAttrs["Welcome"]['tabreqheight'] = 100 
self.nb._pageAttrs["Students"]['tabreqwidth'] = 200 
self.nb._pageAttrs["Students"]['tabreqheight'] = 100 

self.nb._pageAttrs["Books"]['tabreqwidth'] = 200 
self.nb._pageAttrs["Books"]['tabreqheight'] = 100 

self.nb._pageAttrs['Loans']['tabreqwidth'] = 200 
self.nb._pageAttrs["Loans"]['tabreqheight'] = 100 

self.nb._pageAttrs['Help']['tabreqwidth'] = 200 
self.nb._pageAttrs["Help"]['tabreqheight'] = 100* 


#format the house style of tabs: yellow bg and blue text 
self.nb.component('Welcome-tab').configure(font= ('Helviticva',20 ,'bold italic'), 
        fg= "yellow",bg="blue",wraplength=150) 

self.nb.component('Students-tab').configure(font= ('Helviticva',20 ,'bold italic'), 
        fg= "yellow",bg="blue",wraplength=150) 

self.nb.component('Books-tab').configure(font= ('Helviticva',20 ,'bold italic'), 
        fg= "yellow",bg="blue",wraplength=150) 
self.nb.component('Loans-tab').configure(font= ('Helviticva',20 ,'bold italic'), 
        fg= "yellow",bg="blue",wraplength=150) 

self.nb.component('Help-tab').configure(font= ('Helviticva',20,'bold italic'), 
        fg= "yellow",bg="blue",wraplength=150) 

self.nb.pack(fill = 'both', expand = 1, padx = 10, pady = 10) 

self.nb.setnaturalsize() 

Уплотнительное ffending блоки:

*self.nb._pageAttrs['Welcome']['tabreqwidth'] = 200 
self.nb._pageAttrs["Welcome"]['tabreqheight'] = 100 
self.nb._pageAttrs["Students"]['tabreqwidth'] = 200 
self.nb._pageAttrs["Students"]['tabreqheight'] = 100 

self.nb._pageAttrs["Books"]['tabreqwidth'] = 200 
self.nb._pageAttrs["Books"]['tabreqheight'] = 100 

, который я пытался использовать iterkeys но rasised ошибку, iterkeys не является функцией вывода fthis particulat словаря.

Другой блок:

#format the house style of tabs: yellow bg and blue text 
    self.nb.component('Welcome-tab').configure(font= ('Helviticva',20 ,'bold italic'), 
         fg= "yellow",bg="blue",wraplength=150) 

    self.nb.component('Students-tab').configure(font= ('Helviticva',20 ,'bold italic'), 
         fg= "yellow",bg="blue",wraplength=150) 

    self.nb.component('Books-tab').configure(font= ('Helviticva',20 ,'bold italic'), 
         fg= "yellow",bg="blue",wraplength=150) 
    self.nb.component('Loans-tab').configure(font= ('Helviticva',20 ,'bold italic'), 
         fg= "yellow",bg="blue",wraplength=150) 

    self.nb.component('Help-tab').configure(font= ('Helviticva',20,'bold italic'), 
         fg= "yellow",bg="blue",wraplength=150) 

, который, безусловно, может быть петельные через уменьшить повторяющийся код?

ответ

2

Я рекомендую использовать словарь для отслеживания ваших вкладок, а не отдельных атрибутов элементов. Затем вы можете создать вкладки в цикле:

self.tabs = {} 
for tabname in (...): 
    self.tabs[tabname] = self.nb.add(tabname) 

При том, что теперь вы можете перебрать все вкладки довольно легко:

for tabname in self.tabs.keys(): 
    self.nb._pageAttrs[tabname]['tabreqwidth'] = 200 
    ... 
    self.nb.component(tabname+"-tab').configure(...) 
Смежные вопросы