很是糟糕 2023-04-10 22:04 采纳率: 100%
浏览 16
已结题

Python图形界面编程组件超出Frame

问题产生,使用列表循环创建Button,当Button过多超出Frame。起初我用Scrollbar同样放在Frame,但是之后无法关联到Button。求解决超出Frame的控件如何显示的问题

  • 写回答

1条回答 默认 最新

  • CQ.abc 2023-04-10 22:11
    关注

    以下回答结合了ChatGPT:
    如果您在Frame中创建的控件太多,导致超出Frame范围,可以使用Scrollbar来实现滚动条功能,使得用户可以滚动查看控件。下面是一个简单的例子,可以参考:

    from tkinter import *
    
    # 创建窗口
    root = Tk()
    root.geometry('200x200')
    
    # 创建Frame
    frame = Frame(root, width=200, height=150)
    frame.pack(fill=BOTH, expand=1)
    
    # 创建Scrollbar
    scrollbar = Scrollbar(frame)
    scrollbar.pack(side=RIGHT, fill=Y)
    
    # 创建一个Canvas
    canvas = Canvas(frame, yscrollcommand=scrollbar.set)
    canvas.pack(side=LEFT, fill=BOTH, expand=1)
    
    # 配置Scrollbar与Canvas的联动
    scrollbar.config(command=canvas.yview)
    
    # 创建一个Frame,作为Canvas的子控件
    inner_frame = Frame(canvas)
    canvas.create_window(0, 0, anchor=NW, window=inner_frame)
    
    # 创建Button
    for i in range(50):
        btn = Button(inner_frame, text='Button %d' % i)
        btn.pack()
    
    # 配置Canvas的滚动范围
    inner_frame.update_idletasks()
    canvas.config(scrollregion=canvas.bbox('all'))
    
    # 进入消息循环
    root.mainloop()
    

    在这个例子中,我们使用Canvas来创建一个可滚动的Frame,首先在Frame中创建一个Canvas和一个Scrollbar,然后把Canvas作为子控件放入Frame中。接着我们再创建一个Frame,作为Canvas的子控件,然后在这个Frame中创建需要显示的控件,这里使用了50个Button。最后我们需要配置Canvas的滚动范围,让它能够正常滚动。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月18日
  • 已采纳回答 4月10日
  • 创建了问题 4月10日

悬赏问题

  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联
  • ¥15 VB.NET操作免驱摄像头
  • ¥15 笔记本上移动热点开关状态查询
  • ¥85 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目
  • ¥15 利用pthon计算薄膜结构的光导纳