Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 在画布中逻辑放大/缩小_Python 2.7_Canvas_Tkinter - Fatal编程技术网

Python 2.7 在画布中逻辑放大/缩小

Python 2.7 在画布中逻辑放大/缩小,python-2.7,canvas,tkinter,Python 2.7,Canvas,Tkinter,我想创建一个画布小部件,它允许用户在上面绘制。我正在使用canvas.bind。我想要的是画布的大小原本应该是32x32,但当它显示时,它应该像原始小部件的缩放版本一样,而不调整原始画布的大小。我必须使用较小的尺寸(32x32)对绘制的图片进行进一步处理。这意味着,如果画布大小为32x32,则应显示为512x512大小,用于绘图,但32x32大小用于处理。我试过使用canvas.Scale,但它似乎对这个目的没有帮助,因为它调整了原始小部件的大小。有人能指引我吗?我使用python2.7 谢谢

我想创建一个画布小部件,它允许用户在上面绘制。我正在使用canvas.bind。我想要的是画布的大小原本应该是32x32,但当它显示时,它应该像原始小部件的缩放版本一样,而不调整原始画布的大小。我必须使用较小的尺寸(32x32)对绘制的图片进行进一步处理。这意味着,如果画布大小为32x32,则应显示为512x512大小,用于绘图,但32x32大小用于处理。我试过使用canvas.Scale,但它似乎对这个目的没有帮助,因为它调整了原始小部件的大小。有人能指引我吗?我使用python2.7


谢谢

如果我完全理解您的问题,那么我认为这将是您的解决方案:

from __future__ import division
import Tkinter

ORIGINAL_WIDTH  = 32
ORIGINAL_HEIGHT = 32
WINDOW_WIDTH  = 512
WINDOW_HEIGHT = 512
WIDTH_RATIO  = WINDOW_WIDTH/ORIGINAL_WIDTH
HEIGHT_RATIO = WINDOW_HEIGHT/ORIGINAL_HEIGHT

class App(Tkinter.Tk):

    def __init__(self, *args, **kwargs):
        Tkinter.Tk.__init__(self, *args, **kwargs)
        self.canvas = canvas = Tkinter.Canvas( self,
                                               highlightthickness = 0,
                                               width  = WINDOW_WIDTH,
                                               height = WINDOW_HEIGHT )
        self.canvas.pack()
        # Create a list for holding canvas objects
        self.scene = []
        # Draw objects and scale them
        self.draw()
        self.zoom()


    def draw(self):
        canvas = self.canvas

        # Draw rectangles within the range of 0..32 x 0..32
        rect1 = canvas.create_rectangle(  2,  0, 30,  2, fill='black' )
        rect2 = canvas.create_rectangle(  0,  2,  2, 30, fill='black' )
        rect3 = canvas.create_rectangle( 30,  2, 32, 30, fill='black' )
        rect4 = canvas.create_rectangle(  2, 30, 30, 32, fill='black' )
        rect5 = canvas.create_rectangle( 10, 10, 22, 22, fill='black' )

        self.scene.extend( (rect1, rect2, rect3, rect4, rect5) )

    def zoom(self):
        canvas = self.canvas
        # Scale all objects on scene
        for item in self.scene:
            canvas.scale( item, 0, 0, WIDTH_RATIO, HEIGHT_RATIO )

App().mainloop()


亲爱的@user2566909如果您认为发布的答案解决了您的问题,或者至少是找到您正在寻找的解决方案的有用线索,请毫不犹豫地接受它。如果您不知道如何接受答案,您可以在此处找到有关答案的更多信息: