Я пытаюсь следовать руководству по Gtk+ v3, которое можно найти в справочной документации. В частности, первый пример рисования с использованием cairo
для обработки рисунка на Gtk.DrawingArea
.
https://developer.gnome.org/gtk3/stable/ch01s03.html
Для справки, я использую эти ресурсы:
https://python-gtk-3-tutorial.readthedocs.org/en/latest/
http://lazka.github.io/pgi-docs/
Пожалуйста, взгляните на мой (частичный) перевод программы ch01s03
на python. Основная проблема, с которой я столкнулся, связана с configure_event_cb()
, где программа должна создать объект cairo.Surface
, связанный с Gdk.Window
. Я не знаю, как добраться до этого Gdk.Window
или даже где посмотреть справочную документацию.
from gi.repository import Gtk, Gdk, cairo
surface = None
def clear_surface():
global surface
surface = cairo.Surface()
surface.set_source_rgb(1,1,1)
surface.paint()
def configure_event_cb(wid,evt):
global surface
if surface is not None:
surface.destroy()
surface = None
'''
Here, I am trying to implement the following C code:
surface = gdk_window_create_similar_surface(
gtk_widget_get_window(widget),
CAIRO_CONTENT_COLOR,
gtk_widget_get_allocated_width(widget),
gtk_widget_get_allocated_height(widget) );
'''
clear_surface()
return True
def close_window(wid):
global surface
if surface is not None:
surface.destroy()
Gtk.main_quit()
if __name__ == '__main__':
win = Gtk.Window(Gtk.WindowType.TOPLEVEL)
win.set_title('Drawing Area')
win.connect('destroy',close_window)
win.set_border_width(8)
frame = Gtk.Frame()
frame.set_shadow_type(Gtk.ShadowType.IN)
win.add(frame)
da = Gtk.DrawingArea()
da.set_size_request(100,100)
frame.add(da)
da.connect('configure-event',configure_event_cb)
win.show_all()
Gtk.main()
cb
к именам функций? к чему это относится? - person oz123   schedule 12.06.2016