2013-04-10 113 views
0

嗨,大家好我有以下代碼。我在另一個文件中創建了這個類的實例。這給了我一個繪畫區域,但圖像以及我繪製的點沒有顯示。我正在嘗試寫一個棋盤遊戲。這裏的繪圖區域應包含板pygtk繪圖區域不顯示

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

答案是非常相似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()