Dialog schließen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
mika
User
Beiträge: 3
Registriert: Mittwoch 19. September 2012, 16:17

Hallo ich möchte nach einem Thread der ein Datei kopiert das mein Dialog automatisch geschlossen wird. Ich hab schon vieles versucht und jetzt komm ich nicht weiter.

Hier der Code:
In der if anweisung wird der thread aufgerufen und wenn er beendet ist soll der komplete Dialog geschlossen werden, wie kann ich das realisieren.

Code: Alles auswählen

class MeinDialog_1(QtGui.QDialog, Dig_1):
    def __init__(self):
        QtGui.QDialog.__init__(self)
        self.setupUi(self)

        #Slots einrichten
        self.connect(self.OK,QtCore.SIGNAL("clicked()"), self.aktOK)
        self.connect(self.Abbrechen,QtCore.SIGNAL("clicked()"),self.aktAbbrechen)
        
    def aktOK(self):

        z = time.asctime()
        t = z.replace(":","_")


        destination = r"C:\Dokumente und Einstellungen\NeuerOrdner "+t
        source_file = str(self.lineEdit.text())

        


        if os.path.exists(source_file):
            
            thread = KopierThread(source_file,destination)
            thread.start()
            
            
        else:
            self.warnung = MeinDialog_4()
            self.warnung.show()

    


    def aktAbbrechen(self):
        self.close()
Zuletzt geändert von Anonymous am Donnerstag 20. September 2012, 12:43, insgesamt 1-mal geändert.
Grund: Syntaxhervorherbung aktiviert
lunar

@mika Du musst halt auf das Beenden des Threads reagieren, und ".close()" oder ".hide()" auf dem Dialog-Objekt aufrufen. Da Du ausgerechnet die Threadklasse nicht gezeigt hast, kann man Dir jetzt aber nicht sagen, wie das konkret aussehen kann.
mika
User
Beiträge: 3
Registriert: Mittwoch 19. September 2012, 16:17

hallo,

danke erst mal für die Antwort. Den Dialog mit close() zu schließen das ist mir schon bekannt. Das Problem liegt daran das ich kein Signal bekomm wen der Thread fertig ist. Da helfen auch die Funktionen (wie z.b thread.join()) der Klasse Thread nicht weiter, weil die dann das Programm anhalten und mir dan die Prozessbar nicht mehr angezeigt wird. Hier noch der fehlende Code

Code: Alles auswählen

class KopierThread(QtCore.QThread):
    def __init__(self,s,d):
        QtCore.QThread.__init__(self)
        self.source = s
        self.destination = d

    def run(self):
        shutil.copytree(self.source,self.destination)
Zuletzt geändert von Anonymous am Freitag 21. September 2012, 14:18, insgesamt 1-mal geändert.
Grund: Syntaxhervorherbung aktiviert
lunar

@mika Du musst aus Deiner Thread-Klasse heraus ein Signal senden, welches den Abschluss des Kopiervorgangs signalisiert (Beispiel für den Umgang mit Threads und Signal). Alternativ kannst Du für den Anfang auch das bereitgestellte "QThread.finished()"-Signal verwenden.

Bitte setze Deine Quelltext in Zukunft in Python-Tags, um die Einrückung zu erhalten, und die Syntaxhervorhebung zu aktivieren. Verwende dazu den "python"-Knopf direkt oberhalb des Eingabefelds. Danke.
mika
User
Beiträge: 3
Registriert: Mittwoch 19. September 2012, 16:17

Danke ich versuche nächstes mal die Python-Tags besser zu machen.
Antworten