Я хочу построить таблицу в окне; то в каждой ячейке я хочу поставить Gtk.DrawingArea, а затем рисовать прямоугольник для всех.Pygtk: как работает cairo_create()?
Но я не могу понять, как создать контекст КАИР, потому что я получаю эту ошибку:
AttributeError: 'NoneType' object has no attribute 'cairo_create'
Здесь ниже я покажу вам мой код (это все еще прототип, но я хочу, чтобы узнать, как связать контекст Каира правого объекта):
#!/usr/bin/python3.3
# example drawingarea.py
import pygtk
pygtk.require('2.0')
import gtk
class collega_GUI:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title("Drawing Area Example")
self.window.connect("destroy", lambda w: gtk.main_quit())
self.rows=3
self.columns=3
self.table = gtk.Table(self.rows,self.columns,True)
self.window.add(self.table)
self.DrawingArea_list = list()
for i in range(self.rows*self.columns):
self.DrawingArea_list.append(gtk.DrawingArea())
for row in range(0,self.rows):
for column in range(0,self.columns):
cr = self.DrawingArea_list[row*2+column].window.cairo_create()
cr.set_line_width(9)
cr.set_source_rgb(0.7, 0.2, 0.0)
cr.rectangle(0.25, 0.25, 0.5, 0.5)
cr.stroke()
cr.set_source_rgb(0.5, 0.2, 0.3)
cr.fill()
self.table.attach(self.DrawingArea_list[row*2+column], row, row+1, column, column+1)
self.window.show()
if __name__=='__main__':
prova = collega_GUI()
gtk.main()
Извините, но DrawingArea уже существует .. Я создал его раньше. В ** self.DrawingArea_list ** есть 9 DrawingArea. Так что, может быть, beacause я должен рисовать внутри обработчика сигнала для события-экспоната – FrancescoN
. Есть места рисования, но в GdkWindows этих чертежей нет. Не до того, как объекты рисования будут реализованы (см. «Осознать» сигнал, если вам нужно знать, когда это произойдет). В любом случае, вы правы, что единственное правильное место для рисования в GtkWidget - в обработчике «expose-event». – jku
Хорошо, но .. у меня не может быть окна для каждого DrawingArea .. как я могу это сделать? – FrancescoN