首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何制作DrawingArea显示小样例

如何制作DrawingArea显示小样例
EN

Stack Overflow用户
提问于 2013-04-11 22:05:17
回答 1查看 1.5K关注 0票数 2

我已经为DrawingArea编写了一个小型示例,该示例在启动时不显示任何内容。如果我在特定位置插入一个raw_input(),只是为了等待键盘按下,它会起作用,所以这是一种变通方法。代码如下:

代码语言:javascript
复制
#!/usr/bin/env python

import pygtk
pygtk.require('2.0')
import gtk

R = 300

window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_default_size(R, R)
drawing_area = gtk.DrawingArea()
window.add(drawing_area)
window.show_all()
gc = drawing_area.get_style().fg_gc[gtk.STATE_NORMAL]

if 0:
  raw_input()

drawing_area.window.draw_line(gc, R/10, R/10, R*9/10, R*9/10)

raw_input()

此版本不会在打开的窗口中显示绘制的线条;在shell中按enter时,它将终止(并移除窗口)。但是如果我在if 0:块中启用raw_input(),它将在shell中等待两次enter,并且在两次输入之间将显示绘制的线条(因此,一般来说,代码可以正常工作,这似乎只是一个奇怪的刷新问题)。

我还尝试使用以下代码片段刷新GTK的事件队列:

代码语言:javascript
复制
while gtk.events_pending():  # drain the event pipe
  gtk.main_iteration()

我在不同的地方插入了它,总是无济于事。

我还尝试使用通常的gtk.main()作为脚本中的最后一个命令(当然)。但这也没有帮助。

我怎样才能正确地做到这一点?为什么raw_input()会有这么奇怪的副作用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-14 00:36:05

应连接到绘图区域的expose-event信号。这是您应该尝试在绘图区域上绘制的唯一位置;这样做的原因是,当窗口最小化或另一个窗口移动到该窗口上时,您绘制的任何内容都会被再次擦除。但是,expose事件总是在正确的时间发生,因此您可以在需要时随时更新绘图。

如下所示:

代码语言:javascript
复制
def on_drawing_area_expose(drawing_area, event, data=None):
    # ... do your drawing here ...

drawing_area.connect('expose-event', on_drawing_area_expose)

另外,还可以使用Cairo查看绘图,这是首选且更灵活的方式。Here是一个教程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15950904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档