0

大家好,我有以下代码。我在另一个文件中创建了这个类的实例。这给了我一个绘图区域,但没有显示图像以及我绘制的点。我正在尝试编写棋盘游戏。这里的绘图区域应该包含板

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)
4

1 回答 1

0

答案与this非常相似,但在您的情况下,由于您使用的是类,因此您应该覆盖信号的默认处理程序,expose-event而不是连接到该信号。为此,您使用具有魔法名称的方法do_expose_event

总结另一个答案:您应该只在暴露事件期间在绘图区域上绘图,因为当窗口最小化或另一个窗口在其上移动时,您绘制的任何内容都会再次被擦除。但是,expose 事件总是在正确的时间发生,因此您可以在需要时重新绘制。

另外,正如我在另一个答案中所建议的那样,请查看与 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()
于 2013-04-13T16:52:50.700 回答