0

我可以在单个 Gtk.DrawingArea 中绘制,但是当我尝试为许多(例如 50 个)绘制时,我在绘制时遇到了一些错误

在此处输入图像描述

这是您需要检查的代码:

def aggiorna(self, args=()):

        import random
        import time


        while True:
            for i in self.indirizzi_ip:
                self.r=random.randint(0,10)/10.0
                self.g=random.randint(0,10)/10.0
                self.b=random.randint(0,10)/10.0
                self.cpu_info[i]['drawing_area'].show() #the drawing happens here

            time.sleep(1)


    def __draw(self, widget, context): #connected to Gtk.DrawingArea.show()

        context.set_source_rgb(self.r, self.g, self.b) #random
        context.rectangle(0, 0, widget.get_allocated_width(), widget.get_allocated_height())
        context.fill()

1) 为什么我在绘图时会出错?

2) 为什么 Gtk.DrawingArea(s) 只有在我更新窗口时才会改变颜色(例如,我从程序切换到 Gtk.DrawingArea 窗口)?

3) 为什么我不能为每个 Gtk.DrawingArea 获得随机颜色?

4

1 回答 1

1
  1. 帮不了你
  2. 因为它只在 Gtk.DrawingArea 重新绘制自身时改变颜色(“绘制”信号)
  3. r,g,b 应该在“draw”函数中。您确实构造了 r,g,b 但由于它在绘图功能之外,因此在重新绘制区域时它没有改变。
  4. 为什么睡觉?

** 已编辑 **

示例代码:

  ....
  win = Gtk.Window ()
  box = Gtk.Box ()
  self.square_list = []

  for square in range (10):
    self.darea = Gtk.DrawingArea ()
    self.set_size_request (50,50)
    self.square_list.append (self.darea)
    box.add (self.darea)

    #for each darea connect to separate "draw" signal
    self.darea.connect ("draw", self,_draw)

  aggiorna_button = Gtk.Button ('Aggiorna!!!') #sorry i use button
  box.add (aggiorna_button)
  aggiorna.button.connect ("clicked", self.aggiorna)

def _draw (self, widget, cr):
    r = random.randint (0,10)/10.0
    g = random.randint (0,10)/10.0
    b = random.randint (0,10)/10.0
    cr.set_source_rgb (r,g,b)
    cr.rectangle (0,0, widget.get_allocated_width(), widget.get_allocated_height())
    cr.fill ()

def aggiorna (self, widget):
   for darea in self.square_list:
        darea.queue_draw()
于 2014-07-17T02:41:31.733 回答