Python将滚动条添加到框架中
我试图从数据库中读取数据并在GUI中显示它。我在主菜单中的(类:信号)中创建了一个新框架。在这个框架下,我从数据库中读取数据,并为此创建了一个新的画布小部件和框架。在这个新框架中,我试图从条目创建表,并将其显示给用户。代码生成成功,没有错误。也创建了所有栏,但它不可移动。代码附在下面。有什么建议吗Python将滚动条添加到框架中,python,tkinter,scrollbar,frame,Python,Tkinter,Scrollbar,Frame,我试图从数据库中读取数据并在GUI中显示它。我在主菜单中的(类:信号)中创建了一个新框架。在这个框架下,我从数据库中读取数据,并为此创建了一个新的画布小部件和框架。在这个新框架中,我试图从条目创建表,并将其显示给用户。代码生成成功,没有错误。也创建了所有栏,但它不可移动。代码附在下面。有什么建议吗 def LoadMenu(self,controller): self.ActiveMenu = 'New' ##self.WidgHeaderDict = controller.De
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')
def加载菜单(自身、控制器):
self.ActiveMenu='New'
##self.WidgHeaderDict=controller.Destroywidgets(self,self.WidgHeaderDict)
##self.WidgDataDict=controller.Destroywidgets(self,self.WidgDataDict)
cwd=os.getcwd()
在_path=askopenfilename(initialdir=cwd,
文件类型=((“Excel文件”、“*.xls”)、(“所有文件”、“*.xls”),
title=“选择一个文件。”)
打印('当前在'、self.ActiveMenu、'菜单')
df=pd.read\u excel(在'Msg\u Overview'路径中)
controller.createTablePrimaryKey('SignalMenu',self.Widglist,self.WidgType,'SlNo'))
对于范围内的idx(len(df)):
row=df.iloc[idx,0:3]
dict1=行到_dict()
dict1['SlNo']=idx+1
controller.CreateEntryToTable('SignalMenu',dict1)
def ViewMenu(自身、控制器):
self.ActiveMenu='View'
self.WidgHeaderDict=controller.Destroywidgets(self,self.WidgHeaderDict)
self.WidgDataDict=controller.Destroywidgets(self,self.WidgDataDict)
record=controller.GetAlltabledata('SignalMenu')
对于idx,枚举中的字段(self.widgelist):
ent=标签(自我,文本=字段,锚定=西南,对齐=左)
ent.pack()
位置(高度=20,宽度=150,x=((idx*150)),y=60)
self.widgeheaddict[field].append(ent)
Ypos=80
self.canvas=tk.canvas(controller,background=“blue”,borderwidth=0)
self.frame=tk.frame(self.canvas,background=“绿色”)
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(“,self.onFrameConfigure)
打印('小部件输入前调用')
打印('self frame name's',self.frame)
打印('self name is',self)
打印('controller is',controller)
对于记录中的行:
xpos=0
对于idx,枚举(行)中的数据:
xpos=((idx)*150))
ent=tk.Entry(self.canvas,textvariable=StringVar(self,value=data),state=DISABLED)
ent.pack()
位置(高度=20,宽度=150,x=xpos,y=Ypos)
field=self.Widglist[idx]
self.WidgDataDict[field].append(ent)
Ypos=Ypos+20
打印('已创建小部件条目')
def onFrameConfigure(自我,事件):
self.canvas.configure(scrollregion=self.canvas.bbox(“全部”))
打印('Screen Adjusted in',self.ActiveMenu,'Menu')
可能重复的可能重复的、与之相关的或有用的:您将所有条目放在画布中,而不是放在画布中的框架中。