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