Ich habe hier versucht, das Skript auf das Problem zu reduzieren:
Code: Alles auswählen
#!/usr/bin/python
#-*- coding: utf-8 -*-
import gtk, subprocess, threading, thread
class MainClass(object):
def __init__(self): # build gui
""" Initialisiert das Fenster """
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("delete_event", self.event_delete)
self.window.connect("destroy", self.destroy)
self.window.set_default_size(350, 100)
self.window.show()
self.box = gtk.HBox()
self.box.show()
self.window.add(self.box)
self.widGoButton = gtk.Button("Start ripping")
self.widGoButton.show()
self.widGoButton.connect('clicked', self.actGoButton)
self.box.add(self.widGoButton)
self.text = gtk.Entry()
self.text.show()
self.box.add(self.text)
def actGoButton(self, widget):
for n in range(1, 3):
self.text.set_text(str(n)) # wird erst nach ablauf der schleife sichtbar :-(
self.args = ("cdparanoia", "-Z", "-B", "-d", "/dev/scd0", str(n), "/home/atarax/Desktop/Rip/wav")
variante = 1
if (variante == 0):
# funktioniert, aber gui friert ein, solange die schleife läuft :-(
self.actRip()
elif (variante == 1):
# funktioniert, aber gui friert ein, solange die schleife läuft :-(
grabThread = threading.Thread(group=None, target=self.actRip(), name=None, args=self.args)
grabThread.start()
else:
# gibt fehlermeldung: Unhandled exception in thread started by Error in sys.excepthook :-(
thread.start_new_thread(self.actRip, ())
def actRip(self):
retcode = subprocess.call(self.args)
def event_delete(self, widget, event, data=None):
""" reagiert auf 'delete_event' """
return False
def destroy(self, data=None):
""" reagiert auf 'destroy' """
gtk.main_quit()
def main(self):
""" Nachrichtenschleife """
gtk.main()
if __name__ == "__main__":
MyApp = MainClass()
MyApp.main()