很是糟糕 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 阿拉蕾的可能性人看胜利项目
  • ¥20 cesm的气溶胶排放文件
  • ¥30 关于#wpf# devexpress的问题:选中时是黑色未选中是白色字体,想要更改未选中时字体的颜色(语言-c#)
  • ¥15 逐月累计,月份不连续,补齐月份
  • ¥15 应用简单的Python代码完成一个学生成绩管理系统
  • ¥15 用matlab求微分方程初值问题
  • ¥15 vscode下编写第三方库opencv与pcl代码时没有代码提示
  • ¥15 能够跑通不报错,如何解决?(标签-matlab)
  • ¥15 MOS在RDS较大,频率高时开关波形异常
  • ¥15 SCENIC分析报错求解答