I have a simple Python/GTK app. I have a function that does stuff and until said function is done doing stuff, the GtkSpinner should be spinning.
Here is my code:
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()
The time.sleep() command is not the problem. If I replace it with actual "work" the same thing happens. The Spinner is not started/activated.
Why is that? Every command is handled line-by-line. So how can anything be blocking? If I replace the Spinner-code by simple print() statements, they are being outputted just as you'd expect it. I don't have a CS degree and I'm just a hobbyist. Is there some concept I'm not getting?
What do I need to change so that my Spinner starts before the task is started and stops after the task has been finished?
Thanks so much in advance!!
EDIT: This is my Glade file: https://pastebin.com/UDUinH1d