Прошло некоторое время, когда я пытался разместить область рисования в прокрученном окне. Я читал статьи о решениях pygtk и C, но я думаю, что они не работают в pyGobject.GTK3 + (3.14) область рисования на scrolledwindow
Я сделал минимальный пример:
from gi.repository import Gtk, Gdk
import cairo
class Test(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
sw=Gtk.ScrolledWindow()
vp=Gtk.Viewport()
box=Gtk.VBox()
vp.set_size_request(100,100)
for i in range(3):
da=Gtk.DrawingArea()
da.connect("draw", self.draw, [0.3, 0.4, 0.6], da)
da.set_size_request(100,100)
box.add(da)
sw.add(vp)
vp.add(box)
self.add(sw)
self.show_all()
def draw(self, widget, event, color, da):
cr = widget.get_property('window').cairo_create()
cr.rectangle(0, 0, 100, 100)
cr.set_source_rgb(color[0], color[1], color[2])
cr.fill()
main=Test()
Gtk.main()
Таким образом, проблема состоит в том, что области рисования не всегда отображается. Это к примеру, gtk2 рабочий код:
import gtk, cairo
class Test(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
sw=gtk.ScrolledWindow()
vp=gtk.Viewport()
box=gtk.VBox()
for i in range(3):
da=gtk.DrawingArea()
da.connect("expose-event", self.draw, [0.3, 0.4, 0.6], da)
box.add(da)
sw.add(vp)
vp.add(box)
self.add(sw)
self.show_all()
def draw(self, widget, event, color, da):
cr = widget.get_property('window').cairo_create()
cr.rectangle(0, 0, 100, 100)
cr.set_source_rgb(color[0], color[1], color[2])
cr.fill()
main=Test()
gtk.main()
Пожалуйста, не указывают мне на следующие статьи, я уже прочитал их несколько раз!
Я добавил viewport
и size_request
, что еще могло не быть?
Спасибо за помощь!
Здравствуйте, gianmt, не волнуйтесь за модификации, которые были всего лишь минимальным примером. Я выполнил ваш код, и у меня все еще есть те же проблемы. Вы проверили свой код? Проблема заключается в том, что прокручиваемое окно активно (с обеими полосами). Я закончил gtk 3.12 – rsm
Привет rsm, я проверил его, gtk 3.16, хотя – gianmt
ах: /, возможно, это и есть причина. Я открою сообщение, если кто-нибудь найдет решение, более 3.14. gtk 3.16 он еще не находится в Debian:/ – rsm