2016-12-10 3 views
0

У меня есть 2 модуля TkInter. Один из них - это панель инструментов (tBar.py), а вторая - общий модуль (tBarCall.py).ссылки на виджеты из импортированного модуля

1) модуль панели инструментов (tBar.py): это создаст рамку на панели инструментов и поместит на нее кнопки (например, сохранить, добавить, удалить и т. Д.).

2) главный модуль клиента (tBarCall.py): он будет импортировать и запускать модуль панели инструментов. Затем на более позднем этапе он должен включать/отключать некоторые из кнопок, размещенных на рамке панели инструментов. Пожалуйста, см. Ошибки, которые я покажу, когда я пытаюсь включить/отключить кнопки.

Я могу импортировать модуль панели инструментов из главного модуля клиента, но я не могу включать/отключать (ссылаться) на кнопки на панели инструментов.

Не могли бы вы помочь мне, как я могу это сделать?

Вот код:

=== tBar.py ===

import tkinter as tk 

def attach_toolbar(rootWindow, action, save_record, first_record): 
    if action == "I": 
     fToolbar = tk.Frame(rootWindow, padx = 1, pady = 1, bg="RED") 
     fToolbar.grid(row=0, column = 0, sticky='w') #pack(anchor="nw",expand=1) # 
     bSave = tk.Button(fToolbar, text="save", command=save_record)  #width=6, height=2, text = "Save\nrecord", font=("Calibri", 8), 
     bFirst = tk.Button(fToolbar, text="first", command=first_record)  #width=6, height=2, text = "First\nrecord", font=("Calibri", 8), 

     bSave.pack(side="left") 
     bFirst.pack(side="left") 
    else: 
     bFirst.configure(state="disabled") 

=== tBarCall.py ===

import tkinter as tk 
import tBar 

def save_record(): 
    print ("save_record") 

def first_record(): 
    print ("first_record") 

class startModule: 
    def __init__(self, rootWindow): 
     print("__init__") 

     self.rootWindow = rootWindow 
     self.rootClient = tk.Toplevel(self.rootWindow) 
     self.rootClient.geometry('1300x650+1+1') 
     tBar.attach_toolbar(self.rootClient, "I", save_record, first_record) 
     #tBar.attach_toolbar(self.rootClient, "D", save_record, first_record) #UnboundLocalError: local variable 'bFirst' referenced before assignment 
     #bFirst.configure(state="disabled") #NameError: name 'bFirst' is not defined   
     #self.rootClient.bFirst.configure(state="disabled") #AttributeError: 'Toplevel' object has no attribute 'bFirst' 
     #self.rootClient.fToolbar.bFirst.configure(state="disabled") #AttributeError: 'Toplevel' object has no attribute 'fToolbar' 

if __name__ == "__main__": 
    root = tk.Tk() 
    startModule(root) 
    root.mainloop() 

Errorscr

ответ

0

У меня есть обходной путь. Я использовал DICTionary в модуле панели инструментов (т. Е. TBarCall.py), чтобы сохранить информацию о кнопках сохранения, добавления, удаления и т. Д. Затем я вернул этот словарь в вызывающий модуль, т. Е. TBarCall.py. Теперь я могу отключить кнопки, используя этот словарь. Ниже приводится дополнительное кодирование я сделал:

tBar.py

retButtonIdentifier = {"bSave" : bSave} 
retButtonIdentifier["bFirst"]=bFirst  

return retButtonIdentifier 

tBarCall.py

self.dictButtonIdentifier = tBar.attach_toolbar(self.rootClient, "I", save_record, first_record) 

self.dictButtonIdentifier["bSave"].configure(state="disabled")    
self.dictButtonIdentifier["bFirst"].configure(state="disabled")      
Смежные вопросы