相关疑难解决方法(0)

Tkinter画布缩放+移动/平移

Tkinter的canvas小部件具有内置功能:

  • 移动/与平移画布(例如用点击+拖拽)canvas.scan_markcanvas.scan_dragto,看到这个问题

  • 缩放画布上的矢量元素canvas.scale,但遗憾的是,这不适用于画布上的位图图像

幸运的是,此方法允许缩放图像(通过手动重绘图像的缩放部分).但:

  1. 当我们重新绘制画布的特定部分时,移动/平移功能将不再起作用...

  2. 我们绝对需要渲染超过当前显示的区域,以允许移动/平移.假设我们在画布上有1000x1000位图,我们想要缩放50倍...如何避免在内存中有50.000 x 50.000像素的位图?(RAM中2.5千兆像素太大).我们可以考虑仅渲染视口,或者比当前视口稍微多一点以允许平移,但是一旦平移导致渲染区域的边缘怎么办?

如何在Tkinter画布上使用移动/平移+缩放功能,适用于图像?

python canvas tkinter tkinter-canvas

15
推荐指数
2
解决办法
9488
查看次数

使用Tkinter Canvas Widget添加放大和缩小?

如何将放大和缩小添加到以下脚本中,我想将其绑定到鼠标滚轮.如果您在linux上测试此脚本,请不要忘记将MouseWheel事件更改为Button-4和Button-5.

from Tkinter import * 
import Image, ImageTk

class GUI:
    def __init__(self,root):
        frame = Frame(root, bd=2, relief=SUNKEN)

        frame.grid_rowconfigure(0, weight=1)
        frame.grid_columnconfigure(0, weight=1)
        xscrollbar = Scrollbar(frame, orient=HORIZONTAL)
        xscrollbar.grid(row=1, column=0, sticky=E+W)
        yscrollbar = Scrollbar(frame)
        yscrollbar.grid(row=0, column=1, sticky=N+S)
        self.canvas = Canvas(frame, bd=0, xscrollcommand=xscrollbar.set, yscrollcommand=yscrollbar.set, xscrollincrement = 10, yscrollincrement = 10)
        self.canvas.grid(row=0, column=0, sticky=N+S+E+W)

        File = "PATH TO JPG PICTURE HERE"

        self.img = ImageTk.PhotoImage(Image.open(File))
        self.canvas.create_image(0,0,image=self.img, anchor="nw")
        self.canvas.config(scrollregion=self.canvas.bbox(ALL))
        xscrollbar.config(command=self.canvas.xview)
        yscrollbar.config(command=self.canvas.yview)

        frame.pack()

        self.canvas.bind("<Button 3>",self.grab)
        self.canvas.bind("<B3-Motion>",self.drag)
        root.bind("<MouseWheel>",self.zoom)


    def grab(self,event):
        self._y = event.y
        self._x = event.x

    def drag(self,event):
        if …
Run Code Online (Sandbox Code Playgroud)

python tkinter zoom zooming

11
推荐指数
2
解决办法
2万
查看次数

标签 统计

python ×2

tkinter ×2

canvas ×1

tkinter-canvas ×1

zoom ×1

zooming ×1