m0_73118585 2022-08-27 13:18 采纳率: 69%
浏览 19
已结题

tkinter frame问题

怎么才能在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()
    
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月30日
  • 创建了问题 8月27日

悬赏问题

  • ¥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界面无法打开