Tôi muốn lưu giao diện của cửa sổ GTK và tất cả các nút và các tiện ích con khác chứa trong tệp PNG hoặc PDF. Cairo hỗ trợ vẽ trên các bề mặt như vậy. Tôi bằng cách nào đó có thể hỏi một widget GTK để vẽ chính nó trên bề mặt Cairo? Một mẫu mã sẽ được đánh giá cao, vì tôi là người mới đến cả GTK và Cairo. Python là ngôn ngữ tôi chọn.Cách vẽ bất kỳ tiện ích GTK nào trên bề mặt Cairo
Trả lời
Trong C, bạn có thể đặt các nút và tiện ích của mình trong GtkOffscreenWindow
sử dụng gtk_widget_reparent()
và sau đó sử dụng gtk_offscreen_window_get_pixbuf()
để hiển thị nó trên GdkPixbuf
, sau đó bạn có thể lưu vào tệp. Xin lỗi tôi không có bất kỳ mã Python, nhưng tôi không nghĩ rằng các cửa sổ offscreen có sẵn trong PyGTK được nêu ra.
Những gì ptomato nói. Sử dụng một Gtk.OffscreenWindow nếu bạn cần phải làm điều đó tắt màn hình, nếu không chỉ nhận được cửa sổ Gdk và phân bổ của widget để cắt nó. Dưới đây là một đoạn trích có thể được sử dụng để có được ảnh chụp nhanh của bất kỳ tiện ích con nào. Như đoạn mã sau đây, bạn cũng có thể sử dụng phương thức Gtk.Widget.draw() để render nó trong ngữ cảnh Cairo.
from gi.repository import Gtk
import cairo
WINDOW_WIDTH, WINDOW_HEIGHT = 400, 300
window = Gtk.OffscreenWindow()
window.set_default_size(WINDOW_WIDTH, WINDOW_HEIGHT)
window.show()
canvas = Gtk.HBox()
window.add(canvas)
canvas.show()
button = Gtk.Button("Hello World!")
canvas.add(button)
button.show()
# this is needed, otherwise the screenshot is black:
while Gtk.events_pending():
Gtk.main_iteration()
surf = cairo.ImageSurface(cairo.FORMAT_ARGB32,
WINDOW_WIDTH, WINDOW_HEIGHT)
cr = cairo.Context(surf)
canvas.draw(cr)
surf.write_to_png('test.png')
Bạn có thể tạm thời sửa lại một tiện ích (như ptomato đã nói) với Gtk.OffscreenWindow này, để tạo ảnh chụp nhanh.
original_parent = canvas.get_parent()
canvas.reparent(offscreen_window)
# do snapshot
canvas.reparent(original_parent)
- 1. Bất kỳ tiện ích con Java Swing Timeline nào tốt?
- 2. Bất kỳ tiện ích nào để in trực tiếp mảng?
- 3. GTK: Danh sách các tiện ích vô hạn lười biếng
- 4. R: Vẽ một bề mặt 3D từ x, y, z
- 5. Chạm dài trên bề mặt (android)
- 6. Nhấp nháy/rách bề mặt
- 7. Cách cài đặt cairo trên Windows
- 8. Bất kỳ Tiện ích Trình quản lý Cập nhật Plugin jQuery nào?
- 9. spline bề mặt suy
- 10. Android. Làm thế nào chơi video trên bề mặt (OpenGL)
- 11. Bất kỳ ai biết tiện ích để xem/chỉnh sửa cookie trên IE 8?
- 12. vẽ pyqt trên tiện ích con xuất hiện của GUI
- 13. Điều khiển nhãn phát sáng trên bề mặt kính
- 14. Vẽ đồ thị bề mặt có mặt nạ bằng python, numpy và matplotlib
- 15. các ô bề mặt trong matplotlib
- 16. Mặt nạ được nhập bằng tiện ích EditText trong Android
- 17. Phát hiện Maven hoàn tất mà không tìm thấy bất kỳ tiện ích mở rộng nào
- 18. màu liên tục trên bề mặt 3d matplotlib
- 19. Ghi video trên Android của bề mặt OpenGL (GLSURFACEVIEW)
- 20. iPad ra mắt định hướng khi phẳng trên bề mặt
- 21. Có cách nào để "xóa" bề mặt không?
- 22. Python 3.1.1 with --enable-shared: sẽ không xây dựng bất kỳ tiện ích mở rộng nào
- 23. Có cách nào tốt để sao chép tiện ích Gtk không?
- 24. GDI +: Làm cách nào để vẽ một đường dài một inch trên bất kỳ thiết bị nào được vẽ trên?
- 25. Có bất kỳ tiện ích mở rộng đã xuất bản nào cho PKCS # 12 không?
- 26. Vẽ/Vẽ trên đầu các tiện ích được gắn trong QDodckWidget
- 27. Rò rỉ bộ nhớ bề mặt Perl
- 28. Bề mặt hồi quy theo lô
- 29. Sự kiện chuột GTK # trong vùng vẽ
- 30. Matlab: ô bề mặt không hoạt động