У меня есть простое приложение 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 не запускается / не активируется.
Почему это? Каждая команда обрабатывается построчно. Так как же можно что-то блокировать? Если я заменю код Spinner на простые операторы print (), они выводятся так, как вы этого ожидаете. У меня нет степени CS, и я просто увлекаюсь. Есть какая-то концепция, которую я не понимаю?
Что мне нужно изменить, чтобы мой Spinner запускался до запуска задания и останавливался после его завершения?
Большое спасибо заранее !!
РЕДАКТИРОВАТЬ: Это мой файл Glade: https://pastebin.com/UDUinH1d