2012-12-04 56 views
5

Dự án wxPython của tôi có khung, với nhiều bộ lồng nhau lồng nhau.wxpython: tự động thay đổi kích thước ảnh tĩnh (staticbitmap) để vừa với kích thước

Một trong số các sizers có chứa một wxStaticImage với một bitmap được đọc từ một tệp.

Tôi cần hình ảnh để thay đổi kích thước (tăng/thu nhỏ) mỗi lần khung được thay đổi kích thước, vì vậy nó sẽ phù hợp với ranh giới của sizer.

(Tôi nghĩ rằng) Tôi biết cách thay đổi kích thước hình ảnh. Những gì tôi không biết là cách:

  • cách lấy chiều rộng hoặc chiều cao của hình ảnh?
  • có lẽ tôi đã bỏ qua một tài sản thực hiện nó theo cách thủ công?

(cho bây giờ, tôi không nhớ proportions)

Chỉnh sửa: Hoàn thành giải pháp

  1. tôi hiểu sai về wxStaticBitmapin.Size. nó KHÔNG mô tả kích thước của hình ảnh (tức là độ phân giải hình ảnh), nhưng thay vào đó - wxStaticBitmapin.Size cung cấp các kích thước vùng của sizer sizer hoặc nói cách khác: kích thước của tiện ích con hiện tại.

    vì vậy với mã của Mik i bây giờ làm thế nào để vừa với khe.

  2. ngoài giải pháp của mike: khi sử dụng sự kiện onSize trên khung, đừng quên thêm event.skip(). nếu không thì các sizers sẽ ngừng sắp xếp lại. Altertanively, chỉ cần sử dụng onSize của hình ảnh.

đây là phương pháp sự kiện hoàn chỉnh:

def bitmap1_onSize(self, e=None): 
    W, H = self.bitmap1.Size 
    if W > H: 
     NewW = W 
     NewH = W * H/W 
    else: 
     NewH = H 
     NewW = H * W/H 
    img = wx.Image(self.frame_file_picker.Path, wx.BITMAP_TYPE_ANY) 
    img = img.Scale(NewW,NewH) 
    self.bitmap1.SetBitmap(wx.BitmapFromImage(img)) 
    e.Skip() 
+0

Tôi tự hỏi rằng hiện giờ có lớp dẫn xuất thực hiện điều này. Trường hợp sử dụng này không quá bất thường như tôi nghĩ. – buhtz

Trả lời

6

Bạn sẽ cần phải bắt EVT_SIZE hoặc EVT_SIZING. Bạn có thể xem hướng dẫn này tôi đã viết về cách tạo trình xem hình ảnh. Nó có một số mã mở rộng trong đó: http://www.blog.pythonlibrary.org/2010/03/26/creating-a-simple-photo-viewer-with-wxpython/

Tôi chỉ lấy mã tỷ lệ đó và sử dụng nó để cập nhật hình ảnh của bạn. Bạn sẽ muốn chắc chắn rằng bạn ngừng mở rộng quy mô hình ảnh của bạn qua kích thước tối đa của nó hoặc bạn sẽ kết thúc với rất nhiều pixelization mặc dù.

+0

cảm ơn. xem giải pháp hoàn chỉnh bên trong câu hỏi của tôi –

Các vấn đề liên quan