怎么才能在frame里面再设置一个frame,为外面的frame设置滚动条,让里面的frame可以随滚动条滚动显示?
1条回答 默认 最新
- Smart-Space 2022-08-27 16:37关注
tkinter不比win32 api的原生GUI,frame是没办法滚动的,只能使用canvas(推荐)或text作为父组件,里面加入一个Frame子控件。
下面是示例:
from tkinter import * from tkinter import ttk from ctypes import * class ScrolledFrame(Canvas): def __init__(self,master,**kw): self.frame = Frame(master) self.vbar = Scrollbar(self.frame) self.vbar.pack(side=RIGHT, fill=Y) ### kw.update({'yscrollcommand': self.vbar.set}) Canvas.__init__(self,self.frame,**kw) self.pack(fill=BOTH, expand=True) self.vbar['command'] = self.yview ### self.hbar=Scrollbar(self.frame,orient='horizontal',command=self.xview) self.hbar.pack(side=BOTTOM,fill=X) self.config(xscrollcommand=self.hbar.set) # Copy geometry methods canvas_meths = vars(Canvas).keys() methods = vars(Pack).keys() | vars(Grid).keys() | vars(Place).keys() methods = methods.difference(canvas_meths) for m in methods: if m[0] != '_' and m != 'config' and m != 'configure': setattr(self, m, getattr(self.frame, m)) def add_frame(self,x=0,y=0,width=300,height=300,**kw): frame=Frame(self,**kw) self.create_window((x,y),width=width,height=height,window=frame,anchor='nw') self.configure(scrollregion=self.bbox('all')) return frame r=Tk() r.geometry('500x500') sf=ScrolledFrame(r,bg='black') sf.pack(fill='both',expand=True) frame1=sf.add_frame() ttk.Button(frame1,text='frame1 button').pack() frame2=sf.add_frame(x=400,y=160) ttk.Label(frame2,text='frame2 label').pack() r.mainloop()
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 气象网格数据与卫星轨道数据如何匹配
- ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
- ¥15 微软账户问题不小心注销了好像
- ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
- ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
- ¥20 关于web前端如何播放二次加密m3u8视频的问题
- ¥15 使用百度地图api 位置函数报错?
- ¥15 metamask如何添加TRON自定义网络
- ¥66 关于川崎机器人调速问题
- ¥15 winFrom界面无法打开