Python Добавление полосы прокрутки к фрейму - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь прочитать данные из базы данных и отобразить их в графическом интерфейсе. Я создал новый кадр в (Класс: Сигналы) в главном меню. При этом я читаю данные из БД и создаю новый виджет 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')
...