LINUX.ORG.RU

PyGtk проблема с эвентами

 , ,


0

1

Суть таски - есть десктопный виджет, нужно на нем рисовать каждые .05 сек.

Я никогда с GTK не работал, за пару часов немного разобрался и сделал прозрачное окно и даже немного понял, как рисовать. Но проблема в том, что я юзаю эвент «draw», который отрабатывает онли 1 раз. А как сделать «как надо» без понятия. (Гугление дальше не помогает)

Сорс


import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk
import signal, os

class Widget(Gtk.Window):
  def __init__(self):
    Gtk.Window.__init__(self, skip_pager_hint=True, skip_taskbar_hint=True)
    self.set_wmclass("sildesktopwidget","sildesktopwidget")
    self.set_type_hint(Gdk.WindowTypeHint.DESKTOP)
    self.set_size_request(600,400)
    self.set_keep_below(True)

    screen = self.get_screen()
    rgba = screen.get_rgba_visual()
    self.set_visual(rgba)
    self.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(1,1,1,1))

    self.drawArea = Gtk.DrawingArea()
    self.drawArea.connect('draw', draw_cb)
    self.add(self.drawArea)

    self.show_all()
    self.move(300,300)

def draw_cb(widget, cr):
  print "test"
  cr.set_source_rgba(0,0.1,0.2,0.5)
  cr.rectangle(50,75,100,100)
  cr.fill()

if __name__ == '__main__':
  window = Widget()
  signal.signal(signal.SIGINT, signal.SIG_DFL)
  Gtk.main()


создаешь таймер (threading.Timer) в котором делаешь Gdk.Window.invalidate_rect() для Gdk.Window своего виджета. как получить Gdk.Window из Gtk.Window я так и не понял (у тебя последнее), вроде для С есть функции, для pygtk надоело гуглить. таймер пересоздаешь коллбеке каждый раз и перезапускаешь, надеюсь поможет. с GTK ни разу не работал.

trashymichael ★★★
()

Всем спасибо)

HaCk3D
() автор топика
Ответ на: комментарий от anonymous

типо я пишу на gtk и все вызовы должны начинаться с gtk_*, <история про то что forEach «это без цикла»>, даже объяснять не хочется

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

Да все, забей и успокойся уже

Таска то решена, это главное

HaCk3D
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.