pygtk绘图区域没有显示

时间:2013-04-10 10:27:18

标签: python pygtk drawable

大家好我有以下代码。我在另一个文件中创建了这个类的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)

1 个答案:

答案 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()