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

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 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c