GTK 윈도우와 그 안에 포함 된 모든 버튼 및 기타 위젯을 PNG 또는 PDF 파일로 저장하고 싶습니다. 카이로는 그러한 표면을 그리는 것을 지원합니다. 어떻게 든 GTK 위젯에 카이로 표면에 그려달라고 부탁 할 수 있을까요? 코드 샘플은 GTK와 Cairo의 신인입니다. Python이 제 언어입니다.카이로 표면 위에 어떤 GTK 위젯을 그리는 방법
11
A
답변
10
는 C에서, 당신은 gtk_widget_reparent()
를 사용하여 GtkOffscreenWindow
에 버튼과 위젯을 넣어 다음 다음 파일로 저장할 수 있습니다 GdkPixbuf
,에 그것을 렌더링하는 gtk_offscreen_window_get_pixbuf()
를 사용할 수 있습니다. 죄송합니다. 파이썬 코드가 없지만 아직 PyGTK에서 오프 스크린 창을 사용할 수 있다고 생각하지 않습니다.
10
ptomato는 다음과 같이 말합니다. 화면에서 해제해야하는 경우 Gtk.OffscreenWindow를 사용하십시오. 그렇지 않으면 Gdk 창과 위젯의 할당을 가져와 클립으로 잘라냅니다. 다음은 위젯의 스냅 샷을 얻는 데 사용할 수있는 스 니펫입니다. 다음 코드에서 볼 수 있듯이 Gtk.Widget.draw() 메서드를 사용하여 카이로 컨텍스트에서 렌더링 할 수도 있습니다.
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')
(ptomato 말했듯이) 일시적 스냅 샷을 만들기 위해,이 Gtk.OffscreenWindow에 위젯을 reparent 수 있습니다.
original_parent = canvas.get_parent()
canvas.reparent(offscreen_window)
# do snapshot
canvas.reparent(original_parent)
관련 문제
- 1. 레이아웃 위에 그리는 방법
- 2. gtk 위젯을 어떻게 회전합니까?
- 3. 표면 뷰의 "위에"있는 투명한 RelativeLayout?
- 4. Gtk +에서 Cairo를 사용하여 스크린을 그리는 방법은 무엇입니까?
- 5. 보기 위에 그리기 가능을 그리는 방법
- 6. 카메라 미리보기가 실행되는 표면 위에 Stack ImageView?
- 7. Gtk + : 카이로 컨텍스트에서 창의 커서를 설정하는 방법은 무엇입니까?
- 8. 카이로 문맥과 지속성?
- 9. 카이로 분할 이미지
- 10. Gtk 위젯을 복사하는 좋은 방법이 있습니까?
- 11. GTK 위젯을 C에서 vbox로 크기 조정
- 12. gtk : 위젯에 텍스트가있는 것처럼 위젯을 펼치십시오.
- 13. gtk 위젯을 복사하거나 복제하는 방법은 무엇입니까?
- 14. Gtk 위젯의 끝 가장자리에 GtkMenu 위젯을 추가하는 방법
- 15. 노출 이벤트를 생성하지 않고 gtk 창에서 그리는 방법
- 16. 초마다 Android 위젯을 업데이트하는 방법 ... 시계를 초침으로 그리는 방법은 무엇입니까?
- 17. Qt에서 자신의 레이아웃 위에 펼쳐지는 위젯을 수행하는 방법
- 18. Gtk, GtkVBox로 GtkViewPort를 업데이트하는 방법
- 19. 어떤 사람이 어떤 위젯을 가리킬 수 있습니까?
- 20. 카이로 표면을 OS-X에서 파이 게임으로 변환하는 가장 빠른 방법
- 21. 다른 응용 프로그램 위에 그래픽/텍스트 그리는 방법
- 22. CoreGraphics를 사용하여 투명 이미지 위에 이미지를 그리는 방법
- 23. 손가락으로 iPhone을 움직일 때 이미지 위에 선을 그리는 방법
- 24. 캔버스에 표면 뷰 저장
- 25. Gtkmm - "Gtk :: ScrolledWindow"의 "Gtk :: DrawingArea"?
- 26. GTK + 위젯 스태킹
- 27. Google지도에 선을 그리는 방법
- 28. 위젯에서 Gtk 테이블을 제거하는 방법
- 29. 표면 접촉이 ScatterView 이상인지 감지하는 방법?
- 30. 다른 이미지 위에 떠있는 이미지