Я пытаюсь прочитать данные из базы данных и отобразить их в графическом интерфейсе. Я создал новый кадр в (Класс: Сигналы) в главном меню. При этом я читаю данные из БД и создаю новый виджет Canvas и фрейм для этого. В этом новом фрейме я пытаюсь создать таблицу из записи и показать ее пользователю. Построение кода успешно и без ошибок. Панель Scroall также создана, но она не подвижна. код прилагается ниже. Есть предложения?
def LoadMenu(self,controller):
self.ActiveMenu = 'New'
##self.WidgHeaderDict = controller.Destroywidgets(self,self.WidgHeaderDict)
##self.WidgDataDict = controller.Destroywidgets(self,self.WidgDataDict)
cwd = os.getcwd()
in_path = askopenfilename(initialdir=cwd,
filetypes =(("Excel File", "*.xls"),("All Files","*.*")),
title = "Choose a file.")
print('Currently in ',self.ActiveMenu,'Menu')
df = pd.read_excel(in_path,'Msg_Overview')
controller.CreatTablePrimaryKey('SignalMenu',self.Widglist,self.WidgType,'SlNo')
for idx in range(len(df)):
row = df.iloc[idx,0:3]
dict1 = row.to_dict()
dict1['SlNo'] = idx + 1
controller.CreateEntryToTable('SignalMenu',dict1)
def ViewMenu(self,controller):
self.ActiveMenu = 'View'
self.WidgHeaderDict = controller.Destroywidgets(self,self.WidgHeaderDict)
self.WidgDataDict = controller.Destroywidgets(self,self.WidgDataDict)
record = controller.GetAlltabledata('SignalMenu')
for idx,field in enumerate(self.Widglist):
ent = Label(self,text=field,anchor = SW,justify=LEFT)
ent.pack()
ent.place(height=20,width=150,x=((idx*150)),y=60)
self.WidgHeaderDict[field].append(ent)
Ypos = 80
self.canvas = tk.Canvas(controller, background="blue", borderwidth=0)
self.frame = tk.Frame(self.canvas, background="green")
self.scrolly = tk.Scrollbar(controller, orient="vertical", command=self.canvas.yview)
self.scrollx = tk.Scrollbar(controller, orient="horizontal", command=self.canvas.xview)
self.canvas.configure(yscrollcommand=self.scrolly.set, xscrollcommand=self.scrollx.set)
self.canvas.create_window((4,4), window=self.frame, anchor="nw", tags="self.frame")
self.scrolly.pack(side="right", fill="y")
self.canvas.pack(side="top", fill="both", expand=True)
self.scrollx.pack(side="bottom", fill="x")
self.frame.bind("<Configure>", self.onFrameConfigure)
print('Call before widget entry')
print('self frame name is',self.frame)
print('self name is',self)
print('controller is',controller)
for row in record:
xpos = 0
for idx,data in enumerate(row):
xpos = (((idx)*150))
ent = tk.Entry(self.canvas,textvariable=StringVar(self,value = data),state=DISABLED)
ent.pack()
ent.place(height=20,width=150,x=xpos,y=Ypos)
field = self.Widglist[idx]
self.WidgDataDict[field].append(ent)
Ypos = Ypos + 20
print('Created widget entry')
def onFrameConfigure(self, event):
self.canvas.configure(scrollregion=self.canvas.bbox("all"))
print('Screen Adjusted in ',self.ActiveMenu,'Menu')