用tkinter做了个小玩意,加上convas添加上图片,可以鼠标在画布内任意拖动,这些问题都一切正常,现在考虑到图片的大小问题,可能会随着使用者弄不同的图片选择不同的大小,所以这里希望能针对图片能自定义调整大小,例如到时在tkinter上加一个滑块来调整
创建图片的代码如下:
img2 = Image.open(filePath2)
img2 = img2.resize((int(img2.size[0] * 0.2), int(img2.size[1] * 0.2)), Image.ANTIALIAS)
#img2 = img.transpose(Image.FLIP_LEFT_RIGHT)
photo2 = ImageTk.PhotoImage(img2)
cv.create_image(w/2, h/2, image=photo2)
运行的结果如下:
希望达到的效果能在添加的图片,选择图片后,通过按钮或滑块触发一个事件,来放大或缩小,比如点一下,放大10%,点另一个按钮缩小10%
原理其实我倒是理解 ,但是convas中创建图片是通过Image来控制的大小,然后放到convas中去,但这里到底应该是直接调整图片大小还是画布大小呢?如果是只调整图片,那画布大小不变的话,图片大小会超出画布。最主要的还是不知道如何操作convas和里面的图片,网上找了半天没找到详细的convas的文档
可以的,要通过绑定event来实现,而且要继承类,event绑定类方法,改掉canvas的图片,不然图片每次会被刷新掉。
做个了小例子:
import tkinter as tk
from PIL import Image, ImageTk
class root(tk.Tk):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.cv = tk.Canvas(self)
self.cv.pack()
self.img = ImageTk.PhotoImage(Image.open(r'C:\Code\image\example.png'))
self.img_width = self.img.width()
self.img_height = self.img.height()
self.cv_img = self.cv.create_image(200,100,image=self.img)
self.btn1 = tk.Button(text='<<')
self.btn2 = tk.Button(text='>>')
self.btn1.pack(side='left')
self.btn2.pack(side='right')
self.btn1.bind('<Button-1>',self.smaller)
self.btn2.bind('<Button-1>',self.bigger)
def smaller(self,event):
self.img_width -= 10
self.img_height -= 10
self.img = ImageTk.PhotoImage(Image.open(r'C:\Code\image\example.png').resize((self.img_width,self.img_height),Image.ANTIALIAS))
self.cv.itemconfig(self.cv_img,image=self.img)
def bigger(self,event):
self.img_width += 10
self.img_height += 10
self.img = ImageTk.PhotoImage(Image.open(r'C:\Code\image\example.png').resize((self.img_width,self.img_height),Image.ANTIALIAS))
self.cv.itemconfig(self.cv_img,image=self.img)
win=root()
win.mainloop()
还是用resize函数更改大小试试