Tôi có tiện ích GtkImage
trong cửa sổ có thể thay đổi kích thước và tham chiếu GdkPixBuf
lưu hình ảnh mà tôi muốn điền vào GtkImage
.Tự động chia tỷ lệ hình ảnh theo kích thước với (Py) GTK
tôi có thể mở rộng các GdkPixBuf
để điền vào widget GtkImage
sử dụng phương pháp này:
def update_image(self, widget=None, data=None):
# Get the size of the source pixmap
src_width, src_height = self.current_image.get_width(), self.current_image.get_height()
# Get the size of the widget area
widget = self.builder.get_object('image')
allocation = widget.get_allocation()
dst_width, dst_height = allocation.width, allocation.height
# Scale preserving ratio
scale = min(float(dst_width)/src_width, float(dst_height)/src_height)
new_width = int(scale*src_width)
new_height = int(scale*src_height)
pixbuf = self.current_image.scale_simple(new_width, new_height, gtk.gdk.INTERP_BILINEAR)
# Put the generated pixbuf in the GtkImage widget
widget.set_from_pixbuf(pixbuf)
Khi tôi gọi update_image
tay nó hoạt động như mong đợi. Bây giờ tôi muốn mở rộng quy mô tự động khi tiện ích con GtkImage được thay đổi kích thước. Giải pháp tốt nhất mà tôi đưa ra là ràng buộc phương thức update_image
với sự kiện configure-event
GTK của cửa sổ. Sau mỗi thay đổi kích thước của cửa sổ, hình ảnh thực sự được thu nhỏ. Tuy nhiên, tôi có hai vấn đề với giải pháp này:
- Tôi chỉ có thể làm cửa sổ lớn hơn. Khi hình ảnh đã được nâng cấp, GTK sẽ không cho phép tôi thay đổi kích thước cửa sổ nhỏ hơn vì cửa sổ không thể nhỏ hơn các tiện ích của nó. Tôi hiểu tại sao nó hoạt động như thế nhưng tôi không biết làm thế nào để thay đổi hành vi này.
- Có thể đây không phải là vấn đề lớn nhưng tôi có thể đã ưu tiên một sự kiện từ tiện ích GtkImage thay vì cửa sổ cấp cao nhất.
Tôi xin lỗi vì lời giải thích dài về vấn đề tầm thường này, tôi hy vọng bạn sẽ có thể giúp tôi.
Cảm ơn rất nhiều, thủ thuật ScrolledWindow đã hoạt động. Tôi nhận được 'GtkWarning: gtk_scrolled_window_add(): không thể thêm tiện ích con không thể cuộn gtk_scrolled_window_add_with_viewport() thay vào đó' nhưng nếu tôi thêm chế độ xem thì thanh cuộn xuất hiện khi tôi giảm kích thước cửa sổ, vì vậy tôi sẽ để nguyên nó như bây giờ. 'Expose-event' được gọi trên mỗi lần lặp gtk để nó tối đa việc sử dụng CPU. – Jim