,我想在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()发布于 2014-05-22 20:31:09
将DrawingAreas添加到网格中会有一些问题,如果没有设置hexpand和vexpand。此外,还需要添加width_request和height_request (或强制DrawingArea具有大小的其他布局组织),否则初始窗口大小将很小或不可见。下面显示了使用一个网格和两个DrawingAreas的代码:
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()https://stackoverflow.com/questions/23807692
复制相似问题