这顿不吃行不行 2024-03-14 18:44 采纳率: 0%
浏览 14

python Tkinter中画布上图案的自适应问题

python自带的ui库Tkinter写的界面,现有窗口中有一个Frame,Frame中又有若干个用place()方法布局的Canvos,Canvos上有creat_ocal()创建的图案;
在已经采用place布局的情况下怎么使Canvos上的图案随着Frame的缩放而缩放

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-14 18:45
    关注

    引自免费微信小程序:皆我百晓生

    在Tkinter中,要实现Canvas上图案随Frame的缩放而自适应缩放,关键在于绑定窗口和Frame的尺寸变化事件,并根据当前尺寸重新调整Canvas及其上的图形大小。这里是一个使用<Configure>事件实现该功能的示例:

    import tkinter as tk
    
    # 创建主窗口
    root = tk.Tk()
    
    # 定义一个函数用于调整Canvas上图案的大小
    def on_frame_configure(event):
        # 获取Frame的实际宽度和高度
        canvas_width = frame.winfo_width()
        canvas_height = frame.winfo_height()
    
        # 设置Canvas的大小为Frame的大小(这一步可能不需要,取决于你的布局)
        canvas.config(width=canvas_width, height=canvas_height)
    
        # 调整Canvas上已有图形的大小,这里假设你有一个id为'pattern'的图形
        # 比如它原本是按照画布100%大小绘制的,则现在按新的比例缩放
        canvas.itemconfigure('pattern', width=canvas_width, height=canvas_height)
    
    # 创建一个Frame
    frame = tk.Frame(root, bg='white')
    frame.pack(fill=tk.BOTH, expand=True)
    
    # 创建Canvas并添加到Frame中
    canvas = tk.Canvas(frame, background='gray')
    canvas.place(relwidth=1, relheight=1)  # 使Canvas填充整个Frame
    
    # 在Canvas上创建一个图案(例如一个矩形),并记录其ID
    pattern_id = canvas.create_rectangle(0, 0, 100, 100, fill='blue')
    
    # 绑定Frame的尺寸变化事件到on_frame_configure函数
    frame.bind('<Configure>', on_frame_configure)
    
    # 运行主循环
    root.mainloop()
    

    上述代码中,当Frame的尺寸发生变化时,on_frame_configure函数会被调用,然后会根据新的尺寸调整Canvas以及Canvas上的图形大小。请注意,实际应用中,你需要根据具体绘制的图形类型来调整缩放的方式,对于非简单形状可能需要进行更复杂的计算以保持图形的比例或其它特性不变。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月14日

悬赏问题

  • ¥15 程序实在不会写,要秃了
  • ¥15 pycharm导入不了自己的包
  • ¥15 C#.net通过内网url地址获取文件并下载问题,浏览器postman可以正常下载,用程序不行
  • ¥15 本人本科机械,目前研一。没有深度学习基础,目前对研究生课题一片迷茫,请教各位!
  • ¥15 关于R语言单因素与多因素线性回归的平均值
  • ¥15 服务器清除BIOS之后引导不了
  • ¥15 CPLEX用OPL编写的混合整数线性优化问题。
  • ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
  • ¥15 前端预览docx文件,文件从后端传送过来。
  • ¥15 层次聚类和蛋白质相似度