Chciałbym zapisać wygląd okna GTK, a także wszystkie przyciski i inne widżety, które zawiera plik PNG lub PDF. Kair wspiera rysowanie na takich powierzchniach. Czy mogę poprosić widżet GTK, aby narysował się na powierzchni Kairu? Próba kodu byłaby bardzo cenna, ponieważ jestem nowym graczem zarówno w GTK, jak i w Kairze. Python jest moim wybranym językiem.Jak narysować dowolny widget GTK na powierzchni Kairu
Odpowiedz
W C, można umieścić przyciski i widżety w GtkOffscreenWindow
użyciu gtk_widget_reparent()
a następnie użyć gtk_offscreen_window_get_pixbuf()
aby uczynić go na GdkPixbuf
, które można następnie zapisać do pliku. Przepraszam, nie mam żadnego kodu Pythona, ale nie sądzę, że okno poza ekranem jest już dostępne w PyGTK.
Co mówi ptomato. Użyj Gtk.OffscreenWindow, jeśli chcesz zrobić to poza ekranem, w przeciwnym razie po prostu pobierz okno Gdk i alokację widżetu, aby go przyciąć. Oto fragment, za pomocą którego można uzyskać migawkę dowolnego widżetu. Jak pokazuje poniższy kod, możesz również użyć metody Gtk.Widget.draw(), aby renderować ją w kontekście Kairu.
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')
Można tymczasowo reparent widget (jak ptomato powiedział) do tej Gtk.OffscreenWindow, w celu uczynienia migawkę.
original_parent = canvas.get_parent()
canvas.reparent(offscreen_window)
# do snapshot
canvas.reparent(original_parent)
- 1. D3D11: Jak narysować tekst GDI na powierzchni GXDI? (Bez D2D)
- 2. Gtk-Critical **: gtk_widget_show asercja GTK_IS_WIDGET (WIDGET)
- 3. Jak zrobić dowolny widok, aby narysować na płótnie?
- 4. Jak narysować bezpośrednio na pulpicie?
- 5. Tworzenie wykresów w Gtk/Gtk #
- 6. narysuj android.media.Image na powierzchni
- 7. Motyw Gtk w GTK # (Windows)
- 8. Dowiedz się, który widget gtk ma aktualny wybór
- 9. Jak narysować obrazy na terenie w jedności
- 10. Komponent na powierzchni szkła
- 11. narysować prostokątny nakładki na QWidget na kliknięcia
- 12. Znaki ggplot unicode bez Kairu?
- 13. Jak mapować tekstury na zakrzywionej powierzchni?
- 14. Jak zaprezentować numpy array na powierzchni pygame?
- 15. Rysunek Androida na powierzchni i płótnie
- 16. Jak narysować ciąg na BitmapData
- 17. Jak narysować tekst na obrazku?
- 18. Jak narysować tekst na płótnie?
- 19. Jak narysować linię na formularzu?
- 20. Android - Jak narysować na widoku
- 21. jak narysować linię na obrazie?
- 22. Jak narysować widok na wszystko?
- 23. Widget WSF Widget narzędziowy
- 24. Jak zainstalować zależności programistyczne GTK na Ubuntu?
- 25. Jak tłumaczyć aplikację GTK +?
- 26. Jak narysować GdkPixbuf przy użyciu GTK3 i PyGObject
- 27. GTK: Nieskończony leniwy lista widżetów
- 28. Declarative GTK
- 29. Generowanie losowych punktów na powierzchni cylindra
- 30. Jak ustawić ścieżkę dla Kairu w Ubuntu-12.04?