Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将滚动条添加到框架中_Python_Tkinter_Scrollbar_Frame - Fatal编程技术网

Python将滚动条添加到框架中

Python将滚动条添加到框架中,python,tkinter,scrollbar,frame,Python,Tkinter,Scrollbar,Frame,我试图从数据库中读取数据并在GUI中显示它。我在主菜单中的(类:信号)中创建了一个新框架。在这个框架下,我从数据库中读取数据,并为此创建了一个新的画布小部件和框架。在这个新框架中,我试图从条目创建表,并将其显示给用户。代码生成成功,没有错误。也创建了所有栏,但它不可移动。代码附在下面。有什么建议吗 def LoadMenu(self,controller): self.ActiveMenu = 'New' ##self.WidgHeaderDict = controller.De

我试图从数据库中读取数据并在GUI中显示它。我在主菜单中的(类:信号)中创建了一个新框架。在这个框架下,我从数据库中读取数据,并为此创建了一个新的画布小部件和框架。在这个新框架中,我试图从条目创建表,并将其显示给用户。代码生成成功,没有错误。也创建了所有栏,但它不可移动。代码附在下面。有什么建议吗

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')

可能重复的可能重复的、与之相关的或有用的:您将所有条目放在画布中,而不是放在画布中的框架中。