大家好我有以下代码。我在另一个文件中创建了这个类的instanciation。这给了我一个绘图区域,但图像以及我绘制的点都没有显示。我正在尝试写一个棋盘游戏。此处的绘图区域应包含板
import pygtk
pygtk.require('2.0')
import gtk
class Board(gtk.DrawingArea):
def show_background(self, filepath):
pixbuf = gtk.gdk.pixbuf_new_from_file(filepath)
self.get_window().draw_pixbuf(self.style.bg_gc[gtk.STATE_NORMAL], pixbuf, 0,0, 0,0)
def __init__(self, parent_widget):
self.parent_widget = parent_widget
gtk.DrawingArea.__init__(self)
self.parent_widget.pack_end(self, True, True, 10)
self.show()
self.gc = self.style.fg_gc[gtk.STATE_NORMAL]
self.show_background("image.png")
x=20
y=20
points = [(x+10,y+10), (x+10,y), (x+40,y+30),(x+30,y+10), (x+50,y+10)]
self.get_window().draw_points(self.gc, points)
答案 0 :(得分:0)
答案与this非常相似,但在您的情况下,由于您使用的是类,因此应覆盖expose-event
信号的默认处理程序,而不是连接到该信号。为此,您使用具有魔术名称do_expose_event
的方法。
总结另一个答案:您应该只在曝光事件期间在绘图区域上绘图,因为当窗口最小化或其他窗口移动时,您绘制的任何内容都会再次被删除。但是,曝光事件总是在正确的时间发生,因此您可以在需要时重绘。
另外,正如我在其他答案中所建议的那样,请查看drawing with Cairo。
class Board(gtk.DrawingArea):
def show_background(self, filepath):
pixbuf = gtk.gdk.pixbuf_new_from_file(filepath)
self.get_window().draw_pixbuf(self.style.bg_gc[gtk.STATE_NORMAL], pixbuf, 0,0, 0,0)
def do_expose_event(self, event):
self.gc = self.style.fg_gc[gtk.STATE_NORMAL]
self.show_background("image.png")
x=20
y=20
points = [(x+10,y+10), (x+10,y), (x+40,y+30),(x+30,y+10), (x+50,y+10)]
self.get_window().draw_points(self.gc, points)
def __init__(self, parent_widget):
self.parent_widget = parent_widget
gtk.DrawingArea.__init__(self)
self.parent_widget.pack_end(self, True, True, 10)
self.show()