0

Gtk.DrawingArea オブジェクト内に描画したいと思います。私はgtk3で作業しているため、描画機能を「公開イベント」ではなく「描画」イベントに接続する必要があります。

しかし、これはうまくいきません

これが私のコードです:

def draw(widget, context, args=()):

    context.set_source_rgb(0.9, 0, 0.1) #rosso
    context.rectangle(0, 0, widget.get_allocated_width(), widget.get_allocated_height())
    context.fill()


builder = Gtk.Builder()
builder.add_from_file('menuitem.glade')

builder.get_object('drawingarea1').connect("draw", draw)
builder.get_object('drawingarea1').show()

builder.get_object('window1').show() #there are many drawing areas inside a window (they are inside a grid)

Gtk.main()
4

1 に答える 1

1

heexpand と vexpand が設定されていない場合、DrawingAreas を Grid に追加するのは少し問題があります。さらに、width_request と height_request を追加する必要があります (または、DrawingArea にサイズを強制する他のレイアウト構成)。そうしないと、初期ウィンドウ サイズが小さいか、見えなくなります。以下は、Grid と 2 つの DrawingArea を操作するコードを示しています。

from gi.repository import Gtk

ui = """
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<interface>
  <requires lib="gtk+" version="3.10"/>
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <child>
      <object class="GtkGrid" id="grid1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="column_spacing">4</property>
        <child>
          <object class="GtkDrawingArea" id="drawingarea1">
            <property name="width_request">100</property>
            <property name="height_request">100</property>
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="hexpand">True</property>
            <property name="vexpand">True</property>
          </object>
          <packing>
            <property name="left_attach">0</property>
            <property name="top_attach">0</property>
            <property name="width">1</property>
            <property name="height">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkDrawingArea" id="drawingarea2">
            <property name="width_request">100</property>
            <property name="height_request">100</property>
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="hexpand">True</property>
            <property name="vexpand">True</property>
          </object>
          <packing>
            <property name="left_attach">1</property>
            <property name="top_attach">0</property>
            <property name="width">1</property>
            <property name="height">1</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>
"""

def draw(widget, context, color=(0, 0, 0)):
    context.set_source_rgb(*color)
    context.rectangle(0, 0, widget.get_allocated_width(), widget.get_allocated_height())
    context.fill()

builder = Gtk.Builder.new_from_string(ui, -1)
builder.get_object('drawingarea1').connect("draw", draw, (0.9, 0, 0.1))
builder.get_object('drawingarea2').connect("draw", draw, (0.1, 0, 0.9))

window = builder.get_object('window1')
window.connect('destroy', Gtk.main_quit)
window.show_all()

Gtk.main()
于 2014-05-22T20:31:09.277 に答える