나는 빈 레이아웃이 있으며, 고정 된 크기의 GtkDrawingArea가 있습니다. 계층 구조의 현재 관련 부분은 다음과 같습니다 부모 위젯의 가운데에 고정 된 크기의 GtkDrawingArea 위젯
GtkWindow > GtkVBox > GtkHPaned > GtkViewport > GtkAlignment > GtkFixed > GtkDrawingArea
는 현재 GtkFixed 위젯은 GtkViewport의 왼쪽 상단 모서리에 그립니다.
그러나 GtkFixed (따라서 유일한 자식 인 GtkDrawingArea)는 GtkViewport에 집중되어 있습니다 (당연히 위젯이 해당 위치에 맞지 않는 지점으로 압축 될 때 제외). 내용과 스크롤바가 나타납니다).
이 작업을 수행하는 가장 좋은 방법은 무엇입니까? (일반 GTK 질문을 나는 실제 응용 프로그램 논리를 할 pygtk를 사용하고 있지만,이 있어야한다)
여기이 대표 코드 샘플입니다 :
import gtk
class Controller:
def on_window1_destroy(self, widget, data=None):
gtk.main_quit()
def __init__(self):
self.builder = gtk.Builder()
self.builder.add_from_file("sample.glade")
self.window = self.builder.get_object("window1")
self.builder.connect_signals(self)
def on_drawingarea1_expose_event(self, widget, event):
cr = widget.window.cairo_create()
cr.set_source_rgb(0,0,0)
cr.paint()
return True
if __name__ == "__main__":
client = Controller()
client.window.show()
gtk.main()
그리고 같은 문제에 샘플 빈터 파일 :
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="window1">
<signal name="destroy" handler="on_window1_destroy"/>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<child>
<object class="GtkHPaned" id="hpaned1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="resize">False</property>
<property name="shrink">True</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<child>
<object class="GtkFixed" id="fixed1">
<property name="width_request">300</property>
<property name="height_request">300</property>
<property name="visible">True</property>
<child>
<object class="GtkDrawingArea" id="drawingarea1">
<property name="width_request">300</property>
<property name="height_request">300</property>
<property name="visible">True</property>
<signal name="expose_event" handler="on_drawingarea1_expose_event"/>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
이전에 GtkFixed의 부모로 설명한대로 GtkAlignment를 시도했지만 위젯을 중앙에 배치하지 않았습니다. – sleepynate
사람들이 볼 수 있도록 glade 파일을 게시해야 할 수도 있습니다. –
샘플 글 레이드 파일과 일치하는 파이썬 스크립트를 게시했습니다.이 스크립트는 중심을 검은 색으로 유지하고 싶습니다. 이상적으로 검은 색 그리기 영역은 GtkViewport 내부에 집중됩니다. – sleepynate