Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pygtk绘图区域未显示_Python_Pygtk_Drawable - Fatal编程技术网

Python pygtk绘图区域未显示

Python pygtk绘图区域未显示,python,pygtk,drawable,Python,Pygtk,Drawable,大家好,我有以下代码。我在另一个文件中创建了这个类的实例。这给了我一个绘图区域,但图像以及我绘制的点都没有显示出来。我想写一个棋盘游戏。此处的绘图区域应包含电路板 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)

大家好,我有以下代码。我在另一个文件中创建了这个类的实例。这给了我一个绘图区域,但图像以及我绘制的点都没有显示出来。我想写一个棋盘游戏。此处的绘图区域应包含电路板

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)

答案与非常类似,但在您的情况下,因为您使用的是类,所以应该覆盖
暴露事件
信号的默认处理程序,而不是连接到该信号。为此,您使用了一个名为“do_expose_event”的方法

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

另外,正如我在另一个答案中建议的那样,请查看

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