#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import xlrd
from tkinter import *
# 少了这个canvas就滚动不了
def myfunction(event):
canvas.configure(scrollregion=canvas.bbox("all"),width=100,height=100)
def main():
# 创建GUI窗口
root = Tk()
# 编辑root窗口名称
root.title('采购算量'+'请输入各采购物品的数量进行自动计算')
# 使用centerscreen函数,将制定尺寸的窗口置于屏幕中央
framel = Frame(root, relief=GROOVE, width=50, height=100, bd=1)
framel.grid(row=0,column=0)
canvas = Canvas(framel)
framel0 = Frame(canvas)
myscrollbar = Scrollbar(framel, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=myscrollbar.set)
myscrollbar.grid(row=0,column=2,sticky='ns')
canvas.grid(row=0,column=0)
canvas.create_window((0, 0), window=framel0, anchor='nw')
framel0.bind("<Configure>", myfunction)
for i in range(50):
label = Label(framel0,text='name')
label.grid(ipadx=2,ipady=2,row = i,column = 0)
for i in range(50):
inp = Entry(framel0)
inp.grid(ipadx=2,ipady=2,row=i,column=1)
root.mainloop()
if __name__ == '__main__':
main()
另外的网上的可运行的代码
链接
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from tkinter import *
def data():
for i in range(50):
Label(frame,text=i).grid(row=i,column=0)
Label(frame,text="my text"+str(i)).grid(row=i,column=1)
Label(frame,text="..........").grid(row=i,column=2)
inp = Entry(frame)
inp.grid(ipadx=2, ipady=2, row=i, column=3)
# 少了这个就滚动不了
def myfunction(event):
canvas.configure(scrollregion=canvas.bbox("all"),width=200,height=200)
root=Tk()
sizex = 800
sizey = 600
posx = 100
posy = 100
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))
myframe=Frame(root,relief=GROOVE,width=50,height=100,bd=1)
myframe.place(x=10,y=10)
canvas=Canvas(myframe)
frame=Frame(canvas)
myscrollbar=Scrollbar(myframe,orient="vertical",command=canvas.yview)
canvas.configure(yscrollcommand=myscrollbar.set)
myscrollbar.pack(side="right",fill="y")
canvas.pack(side="left")
canvas.create_window((0,0),window=frame,anchor='nw')
frame.bind("<Configure>",myfunction)
data()
root.mainloop()
你的代码中,因为canvas
是局部变量,因此无法绑定。更改:
def main():
global canvas
#...
因为Canvas
的scrollregion
属性定义了画布的可视范围。
Canvas
的bbox
函数可以获取指定画布对象在画布中的覆盖范围(矩形尺寸)。