Das deutsche Python-Forum

10 Jahre Diskussionen rund um die Programmiersprache Python
Aktuelle Zeit: Samstag 22. November 2014, 16:00

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: PyQt4, QThread und eine Progressbar
BeitragVerfasst: Freitag 3. September 2010, 23:26 
Moderator
Benutzeravatar

Registriert: Freitag 4. August 2006, 14:56
Beiträge: 6797
Wohnort: Hamburg
Nabend,

da ich vor dem Problem stand, in einer GUI eine länger dauernde Operation einzubauen, bei der ich gerne den Fortschritt anzeigen lassen wollte, habe ich mir mal eine kleine Demo-App gebastelt, die die grundlegenden Dinge bezüglich des Zusammenspiels von QThread-Subklassen und GUI-Elementen zeigt.

Bild

Vielleicht ist es ja auch für andere ein nettes Beispiel; speziell weil es ja einige Leutchens hier gibt, die die Doku zu PyQt wegen mangelnder Beispiele verteufeln ;-) (Wobei ich die Doku von Nokia zu diesem Thema sehr aufschlussreich fand)


Sobald lunar oder BlackJack das "abgesegnet" haben, kann man sich daran wohl orientieren :-)

_________________
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3))


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PyQt4, QThread und eine Progressbar
BeitragVerfasst: Samstag 4. September 2010, 07:34 
Moderator

Registriert: Dienstag 25. Januar 2005, 23:29
Beiträge: 24169
@Hyperion: Ich bin glaube ich nicht in der Position Qt-Programme heilig zu sprechen, also besser lunar's Segen abwarten. :-)

Ich hätte nur eine Frage: Ist es üblich den `slot_*`-Präfix zu verwenden? Die sind ja an sich nichts besonderes -- soweit ich weiss geht jedes Python-"callable" als Empfänger von Signalen!?

_________________
„solipsism = true if mind? and not world?“ — CoffeeScript documentation about the existential operator


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PyQt4, QThread und eine Progressbar
BeitragVerfasst: Samstag 4. September 2010, 08:43 
Moderator
Benutzeravatar

Registriert: Freitag 4. August 2006, 14:56
Beiträge: 6797
Wohnort: Hamburg
BlackJack hat geschrieben:
Ich hätte nur eine Frage: Ist es üblich den `slot_*`-Präfix zu verwenden? Die sind ja an sich nichts besonderes -- soweit ich weiss geht jedes Python-"callable" als Empfänger von Signalen!?

Da würde ich dir zustimmen. Das ist bei mir wohl noch ein Relikt aus der "pre"-new-style-slots-Ära :-D
Durch die Parameterflut der damaligen Syntax empfand ich es als einfacher zu lesen, wenn man das Präfix davor gesetzt hat. Ich denke jetzt kann man da auch getrost drauf verzichten.

_________________
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3))


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PyQt4, QThread und eine Progressbar
BeitragVerfasst: Montag 6. September 2010, 18:44 
Python-Forum Veteran

Registriert: Freitag 4. August 2006, 11:29
Beiträge: 5746
Im Großen und Ganzen schon ok. Die Präfixe finde ich wirklich unschön, aber das wurde ja bereits angesprochen. Wichtiger ist allerdings noch, das man eigentlich auf die Slot-Methoden vollkommen verzichten kann, und die Interaktion stattdessen über zusätzliche Signal-Slot-Verbindungen zusammen mit partiellen Funktionen noch weiter entkoppeln und noch mehr Quelltext sparen könnte. Daneben gibt es einige Kleinigkeiten: Der Import von "Qt" ist überflüssig, ebenso wie der überschriebene Konstruktor in der Thread-Klasse, der ja eigentlich gar nichts tut.

Zudem ist es bei solchen Threads oft so, dass Minimum und insbesondere Maximum der Schritte dynamisch nach dem Start des Threads berechnet werden. Daher ist es sinnvoll, die Ergebnisse dieser Berechnung mit zwei zusätzlichen Signalen nach außen zu geben, um das Intervall des Fortschrittsbalkens entsprechend anzupassen.

Insofern: Segen erteilt ;)

Wenn es Dir recht ist, würde ich dieses Beispiel gerne etwas überarbeiten und meiner Snippet-Sammlung hinzufügen.

Edit: Ach ja, in einer großen Applikation mit vielen Hintergrundaufgaben würde man übrigens eher QRunnable in Verbindung mit QThreadPool verbinden. Zudem ist diese Aufgabenstellung eine, in der C++ Python tatsächlich etwas voraus hat. Qt bietet mit QtConcurrent eine sehr komfortable Möglichkeit, Datensätze parallel zu verarbeiten, inklusive des ganzen Drumherums wie Abbruch der Verarbeitung oder Fortschrittsmeldungen. Allerdings setzt diese Bibliothek stark auf Templates auf, ist daher nicht so ohne weiteres anzubinden und steht in PyQt4 nicht zur Verfügung. Bei Interesse habe ich für die Anwendung von QtConcurrent in C++ auch ein Beispiel parat, aber im Prinzip ist das hier ja off-topic.

_________________
Freiheit ist immer die Freiheit der Andersdenkenden. (Rosa Luxemburg) — Blog, Twitter, GitHub


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PyQt4, QThread und eine Progressbar
BeitragVerfasst: Dienstag 7. September 2010, 08:10 
Moderator
Benutzeravatar

Registriert: Freitag 4. August 2006, 14:56
Beiträge: 6797
Wohnort: Hamburg
lunar hat geschrieben:
Insofern: Segen erteilt ;)

Wenn es Dir recht ist, würde ich dieses Beispiel gerne etwas überarbeiten und meiner Snippet-Sammlung hinzufügen.

Das wäre mir sogar sehr recht! :-) Bin gespannt auf Dein Änderungen.

_________________
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3))


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PyQt4, QThread und eine Progressbar
BeitragVerfasst: Dienstag 7. September 2010, 10:32 
Python-Forum Veteran

Registriert: Freitag 4. August 2006, 11:29
Beiträge: 5746
https://bitbucket.org/lunar/snippets/sr ... rogress.py

Änderungen
  • Die trivialen Slot-Methoden sind entfallen.
  • Der Thread kann nun von außen beendet werden.
  • Die GUI ist ohne Designer implementiert, damit das Snippet keine Abhängigkeiten hat.
  • Menü und Knopf (imho hässlich) sind durch eine Werkzeugleiste mit Aktionen (inklusive hübscher Icons ;) ) ersetzt.
  • Ein paar erklärende Kommentare sind hinzugekommen.

_________________
Freiheit ist immer die Freiheit der Andersdenkenden. (Rosa Luxemburg) — Blog, Twitter, GitHub


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PyQt4, QThread und eine Progressbar
BeitragVerfasst: Mittwoch 8. September 2010, 12:25 
Moderator
Benutzeravatar

Registriert: Freitag 4. August 2006, 14:56
Beiträge: 6797
Wohnort: Hamburg
Sieht auf den ersten Blick sehr rund aus. Und ist einiges drin, was ich noch nicht kannte ;-)

Werde ich mir mal in einer ruhigen Minute genauer ansehen.

Danke auf jeden Fall für die Verbesserungen!

_________________
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3))


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de