无法在Gtk+;中正确绘制;3.
我可以在一个Gtk.DrawingArea中绘制,但当我尝试为许多人(例如50人)绘制时,我在绘制时出现了一些错误 以下是您需要签出的代码:无法在Gtk+;中正确绘制;3.,gtk,drawing,pygtk,gtk3,drawingarea,Gtk,Drawing,Pygtk,Gtk3,Drawingarea,我可以在一个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)/
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仅在我更新窗口时才更改颜色(例如,我从程序切换到Gtk.DrawingArea窗口)
3) 为什么我不能为每个Gtk.DrawingArea获得随机颜色
....
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()
2) 请记住,“draw”信号不是连接到顶级Gtk.Window,而是连接到Gtk.DrawingArea,我每1秒调用一次“.show()”方法。因为如果每1秒绘制一次,我就更容易看到更新。谢谢。由于Gtk.DrawingArea是toplevel的子级,因此当窗口重新绘制自身时,必须同时绘制所有子级。否则,如何分配绘图区域的宽度和高度?4) .明白了。我会考虑的。。。。啊…抱歉,我以为你在一个绘图区域内创建了50个矩形…你在一个窗口中创建了50个绘图区域编辑了答案。我用按钮刷新,你可能用了超时或者其他什么。谢谢!现在我必须解决1)。只有在向下/向上滚动窗口时才会发生这种情况