当前位置: 首页 > 知识库问答 >
问题:

如何在python中重新绘制gtk小部件而不调用gtk.main_iteration?

司徒耀
2023-03-14

我的应用程序有一个处理按键事件的窗口。当用户按键时,我运行一些长任务,在任务期间,我更新窗口上的标签。要在任务仍在运行时更新标签,我调用以下代码。gtk.events_pending():gtk.main_iteration(False)

此更新标签,但问题是它处理所有事件,包括按键。如果用户在任务运行时按下键,调用main_iteration开始处理该任务。我希望它只更新标签,但不处理任何其他事件。这些事件应该在任务完成时处理。

一种方法是删除按键处理程序,或者在按键处理程序中检查任务是否正在运行,然后忽略按键,但这样按键将会丢失。我想,不知何故,它应该只更新标签,但留下其他事件,这些事件应该在任务完成后处理,应用程序变得空闲。有办法做到这一点吗?

谢谢

共有1个答案

伊铭
2023-03-14

你想要<代码>。queue_draw()和相关的GtkWidget方法。注意,当你回到主循环时,这些会将你的小部件标记为需要重画;我不认为GTK现在有画图的方法(但是标记为脏的并让系统在准备好的时候重画通常对于优化来说更好)。

 类似资料:
  • 这里是简单的Java问题。我制作了一个自定义的JSlider,它在用户移动滑块的最后一个位置绘制方块。我们重写paintcomponent并绘制相对于滑块大小的方块。当你正确地使用滑块时,一切工作都很好。但是,当你调整框架的大小时,问题就会发生。滑块变大,滑块调节器随之移动,但是我们放置的方块相对于滑块不移动。当我们调整框架大小时,我们应该从JSlider中使用哪个函数来重新绘制? 我试图将JSl

  • 有没有一种方法可以强制Flutter重画所有的窗口小部件(比如在区域设置改变之后)?

  • 我正在遵循我上一篇关于绘画的帖子中的建议,即Oracle Swing教程。现在我对何时以及如何调用paintComponent()方法感到困惑。 下面是课程: 教程说,两种重绘方法都是重绘以前的鼠标位置以及新的鼠标位置。我明白,但是paintComponent从何而来?当我们说重绘时,它被调用了吗?如果是这样,为什么不在前面的位置也画一个矩形呢?

  • 我试图绘制一个矩形,它的位置每秒钟更新一次,因为我有一个类,它扩展了JPanel,在它里面我重写了油漆(或油漆组件)function_我已经尝试了这两个_但显然这个函数只被调用一次,正如下面的代码所示,当我试图用reaint函数在无限循环中调用它时,它没有被调用,我能做什么? 上面的代码是图形部分,下面是主函数,它位于另一个类中: 在上面的代码中,食物。加法器是矩形位置更新的地方,我已经检查过了,

  • 问题内容: 我在程序开始时,根据数据库中的某些内容,以编程方式在JScrollPane中添加了许多组件(JPanels,JLabels等)。 似乎对于GUI(?)而言,此过程太快了,因此JScrollPane并不总是正确更新,即,即使内部JPanel大于可见区域,滚动条也不可见。 调整窗口大小(JFrame)可以解决此问题,因为我认为Java在调整组件大小时会重新打印它们。 作为测试,我添加了一个

  • 我编写了这段代码,可以在JavaFX画布上绘制。它可以很好地工作,但我不知道如何重新绘制画布(比如在Swing中),以便在新画布上重新开始绘制。这是我的代码,非常感谢你的帮助!马里奥