使用 pygtk 和 Glade 将 pixbuf 绘制到绘图区域上
我正在尝试用 python 制作一个 GTK 应用程序,我可以将加载的图像绘制到屏幕上,然后单击它。 我尝试执行此操作的方法是将图像加载到 pixbuf 文件中,然后将该 pixbuf 绘制到绘图区域上。
主代码行在这里:
def drawing_refresh(self, widget, event):
#clear the screen
widget.window.draw_rectangle(widget.get_style().white_gc, True, 0, 0, 400, 400)
for n in self.nodes:
widget.window.draw_pixbuf(widget.get_style().fg_gc[gtk.STATE_NORMAL],
self.node_image, 0, 0, 0, 0)
这应该只是将 pixbuf 绘制到左上角的图像上,但除了白色图像之外什么都没有显示。 我已经测试了 pixbuf 通过将其放入 gtk 图像中来加载。 我在这里做错了什么?
i'm trying to make a GTK application in python where I can just draw a loaded image onto the screen where I click on it. The way I am trying to do this is by loading the image into a pixbuf file, and then drawing that pixbuf onto a drawing area.
the main line of code is here:
def drawing_refresh(self, widget, event):
#clear the screen
widget.window.draw_rectangle(widget.get_style().white_gc, True, 0, 0, 400, 400)
for n in self.nodes:
widget.window.draw_pixbuf(widget.get_style().fg_gc[gtk.STATE_NORMAL],
self.node_image, 0, 0, 0, 0)
This should just draw the pixbuf onto the image in the top left corner, but nothing shows but the white image. I have tested that the pixbuf loads by putting it into a gtk image. What am I doing wrong here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以利用 cairo 来执行此操作。 首先,创建一个基于 gtk.DrawingArea 的类,并将暴露事件连接到您的暴露函数。
这将在每次发出暴露事件时绘制图像。
You can make use of cairo to do this. First, create a gtk.DrawingArea based class, and connect the expose-event to your expose func.
This will draw the image every time the expose-event is emited.
我发现我只需要让函数在函数末尾使用
widget.queue_draw()
调用另一个公开事件。 该函数在开始时仅被调用一次,并且此时没有可用的节点,因此没有绘制任何内容。I found out I just need to get the function to call another expose event with
widget.queue_draw()
at the end of the function. The function was only being called once at the start, and there were no nodes available at this point so nothing was being drawn.