gpt4 book ai didi

python - "Manually"在 gtk.DrawingArea 上调用暴露事件

转载 作者:行者123 更新时间:2023-12-02 08:46:44 32 4
gpt4 key购买 nike

我正在创建一个用于数据可视化的小工具。GUI 是用 Pygtk 创建的,非常简单。用户输入文件名后,可以按“calc”按钮查看输出。输出由 pycairo 渲染并呈现在 gtk.DrawingArea 中。

该应用程序的工作原理如下:当按下按钮时,文件将被处理并将其内容存储在一个特殊的类中。此类是一个自定义容器:它与 gui 一起实例化,并且可以是空的或已填充的。 DrawingArea 的公开事件链接到读取容器并绘制其内容的绘图函数。只要容器是空的,绘图区域就保持为空,但是在单击计算并加载文件后,绘图区域应该填充我的视觉效果。

问题是:除了更新绘图区域之外,一切正常。我不知道如何手动调用公开。按 calc 后,我必须调整窗口大小才能看到结果。

更具体:我从教程中复制了这段代码,但不知道如何自己提供参数事件:

def do_expose_event(self,event):
# Create the cairo context
cr = self.window.cairo_create()

# Restrict Cairo to the exposed area; avoid extra work
cr.rectangle(event.area.x, event.area.y,
event.area.width, event.area.height)
cr.clip()

self.draw(cr, *self.window.get_size())

最佳答案

为了刷新您的小部件,您需要告诉 GTK+ 它需要重新绘制,通常使用 gtk.Widget.queue_draw() (称为 self.queue_draw() ),这会使您的整个小部件无效并安排重绘(通过发出暴露事件),该重绘将在您的程序返回主循环后发生。

如果您需要对重绘区域进行更多控制,可以随时使用 gtk.Widget.queue_draw_area() 指定要无效的区域,或者一直到 gtk .gdk.Window.invalidate_rect().

关于python - "Manually"在 gtk.DrawingArea 上调用暴露事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8743367/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com