【发布时间】:2018-08-30 21:17:02
【问题描述】:
我有一个简单的 Python/GTK 应用程序。我有一个做事的函数,直到所说的函数完成做事,GtkSpinner 应该是旋转的。
这是我的代码:
import time
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class Handler:
def on_main_window_destroy(self, *args):
Gtk.main_quit()
def on_button_clicked(self, *args):
print("button clicked")
self.dostuff()
def dostuff(self):
app.spinner.start()
print("I'm doing stuff")
time.sleep(3)
print("I'm done")
app.spinner.stop()
class MainApp():
def __init__(self):
self.builder = Gtk.Builder()
self.builder.add_from_file("test.glade")
self.builder.connect_signals(Handler())
self.main_window = self.builder.get_object("main_window")
self.main_window.show()
self.spinner = self.builder.get_object("spinner")
def main(self):
Gtk.main()
if __name__ == "__main__":
app = MainApp()
app.main()
time.sleep() 命令不是问题。如果我用实际的“工作”替换它,同样的事情也会发生。 Spinner 未启动/激活。
这是为什么呢?每个命令都是逐行处理的。那么有什么东西会阻塞呢?如果我用简单的 print() 语句替换 Spinner 代码,它们会按照您的预期输出。我没有CS学位,我只是一个业余爱好者。有什么我没有得到的概念吗?
我需要更改哪些内容,以便我的 Spinner 在任务开始之前启动并在任务完成后停止?
提前非常感谢!
编辑:这是我的 Glade 文件:https://pastebin.com/UDUinH1d
【问题讨论】:
-
您的程序无法执行,因此很难知道哪里出了问题。微调器是否可见?请创建一个Minimal, Complete, and Verifiable example。
-
我将 Glade 文件添加到我的原始帖子中。它现在应该可以工作了!
-
不,这不是没有任何努力,您应该发布一个开箱即用的非常小的示例
-
对不起,我不明白。这已经是可能的最小示例了。我有一个更大的应用程序,只是做了这个简单的演示来显示问题所在。真的没有办法让它变得更小。你需要存档。我原始帖子中发布的 *.py 文件和您可以在 pastebin 链接中找到的 test.glade 文件。然后将两个文件放在一个目录中,然后运行 Python 文件。 (显然你需要在 GTK Linux 环境中)
-
由于缩进不正确,您的 Python 代码示例无法执行。很高兴您解决了自己的问题!
标签: gtk3 pygtk pygobject gtkspinner