如何解决在tkinter画布中处理图像的最佳方法是什么?
你好,我是编程新手,我正在做一个tkinter项目来学习。
在我的项目中,由于我不喜欢tkinter小部件,因此ive决定只使用Canvas小部件并在其中绘制所有程序。
为此,我正在制作自己的小部件,这些小部件将在画布中绘制。 我想要的是一个遵循以下结构的小部件:
class Rectangle:
def __init__(self,canvas,coords,img):
self.canvas = canvas
self.img = img
def _redraw(self,coords):
self.img.redraw(coords)
我希望小部件存储某种image_object。函数_redraw将给出新大小的坐标,例如(x0,y0,x1,y1),我希望img对象重绘自身以适应新坐标。
我想知道实现此目标的最佳方法(就空间和速度而言),理想情况下,我想使用svg文件。有什么建议吗?
解决方法
class Image:
def __init__(self,canvas,filePath):
self.canvas = canvas
self.img = tk.PhotoImage(file = filePath)
def _redraw(self,x,y):
return self.canvas.create_image(x,y,image = self.img)
def setScale(self,scale):
if scale >= 1:
self.img = self.img.zoom(int(scale))
else:
self.img = self.img.subsample(int(1/scale))
我已经将其用于png,未经svgs测试。 因此,对于png等,最好在加载之前从外部调整图像的大小,但是如果不方便,可以使用scale功能。
还有更多选项可以添加到create_image()中,例如锚点等,请参见文档。
此外,还有几种移动图像的方法。一种是在其他位置取消绘制并重新绘制(您需要保留从create_image()返回的ID,以便可以对其进行绘制)。另一种是使用coords()函数,请参阅文档,另请参见Change coords of line in python tkinter canvas
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。