我有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()
答案 0 :(得分: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")