python tkinter frame滚动条_Python Tkinter滚动条画布不起作用

我无法让滚动条适用于tkinter框架 . 我希望能够滚动的框架是由导入的SQL内容组成的网格 . 我已将此框架包含在画布中(如其他帖子中所示) .

当我加载特定的屏幕时,画布会在非常小的空间中加载,其中包含几个SQL内容标签和后面的滚动条 . 使用滚动条时,画布会扩展以填充适当的大小,并且它可以正常工作 .

以下是使用滚动条之前和之后的两个屏幕截图:

在使用滚动之前:

滚动后使用:

以下是此特定帧的代码:

def drawBoardMain(): #BOARDS

global displayName

global body

global root

global mainFont

body=Frame(root)

headFrame=Frame(body) #heading

logoSource=PhotoImage(file='holcombe.gif')

logo=Label(headFrame,image=logoSource)

logo.logoSource=logoSource

logo.grid(row=0,rowspan=2,column=0)

heading=Label(headFrame,text='Display Management System - Board Management',font=(mainFont,24)).grid(row=0,rowspan=2,column=1)

loginLabel=Label(headFrame,text='Logged in as:',font=(mainFont,12)).grid(row=0,column=2,sticky=S)

userLabel=Label(headFrame,text=displayName,font=(mainFont,12)).grid(row=1,column=2,sticky=N)

headFrame.pack() #heading

mainFrame=Frame(body) #main body

introLabel=Label(mainFrame,text='Select a board to view more details or make changes, or click the button below to add a new one',font=(mainFont,14)).grid(column=0,row=0)

containingCanvas=Canvas(mainFrame,height=500,width=900) #canvasOPEN

myscrollbar=Scrollbar(containingCanvas,orient="vertical",command=containingCanvas.yview) #scrollbarOPEN

containingCanvas.configure(yscrollcommand=myscrollbar.set)

containingCanvas.configure(scrollregion = containingCanvas.bbox("all"))

myscrollbar.pack(fill='y',side=RIGHT) #scrollbarCLOSE

containingCanvas.grid(column=0,row=1,pady=15) #canvasCLOSE

users=Frame(containingCanvas) #board browserOPEN

con=sql.connect('datastore.db')

cur=con.cursor()

cur.execute('SELECT boardID FROM tblBoards')

boards=cur.fetchall()

cur.execute('SELECT locationDescription FROM tblBoards')

locationDescriptions=cur.fetchall()

cur.execute('SELECT department FROM tblBoards')

departments=cur.fetchall()

cur.execute('SELECT comments FROM tblBoards')

comments=cur.fetchall()

con.close()

for i in range(len(boards)):

a=Button(users,text=boards[i],font=(mainFont,14),width=20,padx=3,command=lambda x=boards[i][0]:handleBoardEdit(x))

a.grid(column=0,row=i+1,sticky=NSEW,padx=1)

for j in range(len(locationDescriptions)):

b=Label(users,text=locationDescriptions[j],font=(mainFont,14),padx=3,relief=RAISED)

b.grid(row=j+1,column=1,sticky=NSEW,padx=1)

for k in range(len(departments)):

c=Label(users,text=departments[k],font=(mainFont,14),padx=3,relief=RAISED)

c.grid(row=k+1,column=2,sticky=NSEW,padx=1)

for l in range(len(comments)):

d=Label(users,text=comments[l],font=(mainFont,14),padx=3,relief=RAISED)

d.grid(row=l+1,column=3,sticky=NSEW,padx=1)

uLabel=Label(users,text="Board ID",font=(mainFont,16),padx=3,relief=RAISED).grid(column=0,row=0,sticky=NSEW)

fLabel=Label(users,text="Location",font=(mainFont,16),padx=3,relief=RAISED).grid(column=1,row=0,sticky=NSEW)

sLabel=Label(users,text="Department",font=(mainFont,16),padx=3,relief=RAISED).grid(column=2,row=0,sticky=NSEW)

rLabel=Label(users,text="Comments",font=(mainFont,16),padx=3,relief=RAISED).grid(column=3,row=0,sticky=NSEW)

users.bind("", lambda event, containingCanvas=containingCanvas: containingCanvas.configure(scrollregion=containingCanvas.bbox("all")))

users.pack(fill='both',side=LEFT) #board browserCLOSE

containingCanvas.create_window((4,4),window=users, anchor="nw")

addButton=Button(mainFrame,text='Add New',font=(mainFont,14),command=handleAddBoard).grid(column=0,row=2)

mainFrame.pack() #main body

footFrame=Frame(body) #footer

logoutButton=Button(footFrame,text='Back to Menu',width='7',height='2',wraplength='80',font=(mainFont,14),command=returnMainHandle).grid(column=0,row=0,pady=15)

footFrame.pack(side=BOTTOM) #footer

body.pack(fill=BOTH,expand=1)

我估计我可能只是输错了顺序 . 任何帮助表示赞赏 .

我知道这个代码非常低效,我可能会更好地创建一个使用对象的解决方案,但是这在目前是不可行的所以程序性的答案只能请谢谢:)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值