2013-10-30 87 views
1

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

谢谢!

+0

亲爱的@ user2566909如果你认为张贴答案解决您的问题,或者至少这是一个有用的线索找到您正在寻找的解决方案,请不要犹豫,接受它。如果您不知道如何接受答案,在这里您可以找到更多关于它的信息:http://meta.stackexchange.com/a/5235 –

回答

2

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

enter image description here

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()