Probleme mit PyQT, Python und Shell-commands [Anfänger]

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
BlackJack

@gurulux: Von den Tutorials scheint nicht viel hängen geblieben zu sein, wenn Du versuchst den ``&``-Operator auf Zeichenketten anzuwenden. Quelltext in einer bekannten Sprache zu schreiben, und hoffen, dass die neu zu erlernende Sprache den genau so behandelt, ist nicht die beste Art eine neue Sprache zu lernen. ;-)
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@alle:
Möchte doch mal kurz daran erinnern, dass wir alle mal Anfänger in Sachen Python/Qt waren und immernoch dazulernen. Keine Ahnung warum, aber der Rat 'uhm bleib doch lieber bei Deinen Leisten' kommt in letzter Zeit öfters. Ich weiss nicht, wie viele von uns das seinerzeit motiviert hätte, am Python-Ball zu bleiben...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

jerch hat geschrieben:@alle:
Keine Ahnung warum, aber der Rat 'uhm bleib doch lieber bei Deinen Leisten' kommt in letzter Zeit öfters. Ich weiss nicht, wie viele von uns das seinerzeit motiviert hätte, am Python-Ball zu bleiben...
Moment! Der Rat lautete doch nur, "wenn Du nicht bereit bist, neues zu lernen, dann bleibe bei Deinen Leisten!". Diese Einschränkung macht den kleinen aber feinen Unterschied zwischen herablassender Ablehnung und gut gemeintem Ratschlag.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
gurulux
User
Beiträge: 12
Registriert: Samstag 21. Januar 2012, 17:34

Guten Tag allerseits,

um mal etwas Beruhigung in das Thema zu bringen:
1. Ich werde meine Anstrengungen in der Richtung Python NICHT einstellen
2. Ich werde mir für die Zukunft GENAU überlegen, WO und WEN ich um Hilfe frage
3. Mit genug Alter und Erfahrung in Ausbildung mir anvertrauter junger Menschen,
denke ich nicht, dass ich mir auf eine ehrliche Frage mit Angaben zur Situation,
derart unverschämte Antworten als EINSTEIGER zumuten muss.
4. WENN ich HIER nochmals um Hilfe fragen werde, dann werde ich sicher zuvor
in Fremdsprachlichen Foren forschen, da dort normal SEHR VIEL milder mit Einsteigern
umgegangen wird.
5. Bitte zerstreitet EUCH NICHT meinetwegen, ein EINZELNER Einsteiger ist DAS
NICHT WERT ! !

--------------------------------------
Da ich ja nun die Nacht zeit hatte zum Lesen und übersetzen, habe ich aus dem
"Silbertablett" von lunar entnommen, dass es besser ist, eine Art "Starter-Script"
für die Qt- erstellte GUI zu erstellen. Dass ich den Aufruf des enstprechenden Shell-Scripts
zuvor aus Strings zusammenfügen muss, um ihn dann an die Function os.system() zu
übegeben, habe ich auch verstanden. Allerdings hilft mir das in keiner Weise weiter, um zu erkennen
wie ich bei einem gedrückten Button einen vorgegebenen Text erhalte, den ich dann im Pfad-String
verarbeiten kann.
Da ich KEINE andere, als Mausaktionen mit meinem geplanten "Script" erzeugen möchte,
komme ich also an dieser Stelle mit einer CLI- Anwendung nicht zum Ziel.
Dies nur als weitere Info für die Leute, die mir bisher Hinweise gaben.
UND:

ICH BITTE AUDRÜCKLICH darum, auf diesen Thread-Eintrag
KEINE WEITEREN HINWEISE zum erreichen meiner Ziele AUFZUFÜHREN ! !

Es ist mir nun Sehr daran gelegen, mir diese selbst zu erarbeiten, auch wenn
ich diesen Thread weiter lesen werde, sowie viele andere Threads hier im Forum.

Euch ALLEN eine schönen Sonntag,
gu.lux
gurulux
User
Beiträge: 12
Registriert: Samstag 21. Januar 2012, 17:34

... Ansichten:
Hyperion hat geschrieben: Ja, Du willst zu viel auf einmal!
Gerechtfertigt, akzeptiert...
Hyperion hat geschrieben:Lerne doch erst einmal die Grundlagen von Python und lass die Finger von GUIs!
Einzusehen, allerdings als ERSTANWORT, FALSCHER TON ! (gewollte De-Motivation?)
Hyperion hat geschrieben:Wenn Du ein einigermaßen sinnvolles Tutorial zu PyQt gelesen hättest, wüsstest Du, dass man keinen Code in eine generierte Ui-Klassendatei schreibt ;-)
Wird nirgends derart klar propagiert, aber verstanden und akzeptiert.
Wozu braucht man dann noch 'pyuic4 -x' ?
Hyperion hat geschrieben: Hinzu kommt, dass wir ein spezielles Forum zu PyQt / PySide haben - ok, Du bist neu hier und musst Dich erst einmal orientieren, aber irgend wie zeigt mir das, dass Du zu ungeduldig und zu schnell an die Dinge rangehst.
Mein Fehler, zu 100% akzeptiert. Kann hier BITTE ein MOD, oder ADMIN entsprechend verschieben ?
Hyperion hat geschrieben:
gurulux hat geschrieben: Also bleibe ich beseer dabei und Win****.
Was hat Deine Problematik mit dem verwendeten OS zu tun? *wunder*
Gaanz einfach: Befasse mich seit Monaten nur noch mit meiner 10.04LTS-Installation und
dem, was es dazu gibt. Aber ziehe leider immer noch Vergleiche. Mit VB wäre ich längst
fertig, aber eben Win**** gebunden.
snafu hat geschrieben:
gurulux hat geschrieben:ich bin halt noch VB2005 gewohnt.
Also bleibe ich besser dabei und Win****.
Sofern du keine Lust hast auf große Veränderungen, ist das wahrscheinlich wirklich die beste Idee. Eine neue Programmiersprache lernt man bekanntlich nicht in einer Woche. Mal davon ab, dass du quasi 2 Sprachen lernen musst: Qt und Python.
Sollte ich nicht auf Veränderungen eingestellt sein, hätte ich wohl nicht erst ein weiteres OS installiert und mich
dann um die bekanntesten Möglichkeiten dafür belesen. Doch, ich bin schon bereit mich auf Veränderungen einzulassen.
OK, vielleicht will ich zu viel auf einmal....akzeptiert.
BlackJack hat geschrieben:@gurulux: Von den Tutorials scheint nicht viel hängen geblieben zu sein, wenn Du versuchst den ``&``-Operator auf Zeichenketten anzuwenden.
Quelltext in einer bekannten Sprache zu schreiben, und hoffen, dass die neu zu erlernende Sprache den genau so behandelt,
ist nicht die beste Art eine neue Sprache zu lernen. ;-)
Freut mich zu lernen, dass Dir am Anfang keine Fehler unterlaufen sind ;)


Gruss
gu.lux

@MOD/ADMIN: CLOSE PLEASE
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

gurulux hat geschrieben:@MOD/ADMIN: CLOSE PLEASE
Ich befürchte Foren sind nicht ganz deine Sache. Und nein, demotivieren will dich hier keiner, alles ist als ernster Ratschlag gemeint. Wenn du im Umgang mit GUIs erhebliche Probleme hast, die auf mangelndes Verständnis von Pythons Grundlagen schließen lassen, ist wohl offensichtlich, dass du besser besagte Grundlagen erlernst bevor es weitergeht. Das direkt richtig zu formulieren spart Worte und Zeit. Mag sein, dass deswegen die Community hier als "hart und rücksichtlos" rüberkommt, aber es bringt einem mehr bei als wenn stattdessen Vorschläge kommen, die nur die Symptome statt der Ursache der Probleme (was meist schlechter Stil oder falscher Ansatz sind) behandeln.

Threads werden übrigens für gewöhnlich nur bei großen Friedensstörern geschlossen oder gelöscht.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

gurulux hat geschrieben:
BlackJack hat geschrieben:@gurulux: Von den Tutorials scheint nicht viel hängen geblieben zu sein, wenn Du versuchst den ``&``-Operator auf Zeichenketten anzuwenden.
Quelltext in einer bekannten Sprache zu schreiben, und hoffen, dass die neu zu erlernende Sprache den genau so behandelt,
ist nicht die beste Art eine neue Sprache zu lernen. ;-)
Freut mich zu lernen, dass Dir am Anfang keine Fehler unterlaufen sind ;)
Der Hinweis ist aber durchaus gerechtfertigt. Jede Sprache unterscheidet sich in diversen Teilgebieten von der anderen. Du kannst nicht davon ausgehen, dass sich Sprache A bei einer gleichlautenden Eingabe immer genau so verhält wie Sprache B. Zu diesem Aspekt gehört auch, dass du die Syntax einer neuen Sprache u.U. von grundauf neu lernen (oder zumindest: "hinterfragen") musst. Als prominentes Beispiel sei hier mal der Modulo-Operator genannt, der bei negativen Zahlen in Java ganz andere Ergebnisse ausgibt als in Python, weil er eben intern anders implementiert ist. Damit ist sicherlich auch schon der eine oder andere Umsteiger auf die Nase gefallen bzw hatte ein gewisses Aha-Erlebnis. Solche Sachen zu bedenken, gehört halt einfach dazu. Und das ist jetzt bitte nicht als Belehrungsversuch eines Jungspundes (eine Interpretation, die bei Leuten älteren Semesters leider sehr häufig begangen wird), sondern einfach als gut gemeinter Ratschlag zu verstehen. :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

gurulux hat geschrieben:
Hyperion hat geschrieben:Lerne doch erst einmal die Grundlagen von Python und lass die Finger von GUIs!
Einzusehen, allerdings als ERSTANWORT, FALSCHER TON ! (gewollte De-Motivation?)
Sorry, das ist doch Unsinn! Zum einen gibst Du hier das ganze verkürzt wieder - ich hatte zu einer genaueren, ausführlicheren Darstellung einen Link zu einem Blog-Artikel gepostet. Wieso sollte ich das alles noch selber genauer ausführen? Zum anderen suggeriere ich doch hier nicht, dass Du die Finger von Python lassen sollst; ganz im Gegenteil sind eben Frustrationen vorprogrammiert, wenn man an Probleme und Fehler stößt, die man sich ohne die Kenntnisse der Grundlagen nicht erklären kann. Du kannst hier im Forum auch gerne mal diverse Threads durchsuchen, in denen wir immer wieder Anfängern davon abraten, sich direkt zu Beginn mit GUIs zu befassen.

Aber ich bin gerne bereit Kritik anzunehmen und bitte Dich daher, einfach mal selber eine bessere Antwort zu formulieren. Also: Schreib doch mal meine Ansicht auf Deine Art und Weise, die Dir als nicht demotivierend erscheint auf.
gurulux hat geschrieben:
Hyperion hat geschrieben:Wenn Du ein einigermaßen sinnvolles Tutorial zu PyQt gelesen hättest, wüsstest Du, dass man keinen Code in eine generierte Ui-Klassendatei schreibt ;-)
Wird nirgends derart klar propagiert, aber verstanden und akzeptiert.
Wozu braucht man dann noch 'pyuic4 -x' ?
Naja, der QtDesigner speichert das UI-Design in einem XML-Dialekt. Aus diesem musst Du ja noch irgend wie die notwendigen Python-Klassen generieren. Alternativ gibt es bei PyQt noch das `uic`-Modul. Dieses generiert die UI-Klassen dynamisch während der Laufzeit. Damit brauchst Du das Tool zum Wandeln nicht mehr. (PySide fehlt so ein dynamisches Laden noch - einziges Manko meiner Meinung nach).
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@gurulux: Eins würde mich noch interessieren - du erwähnst mehrfach dein Alter. Wie alt bis du denn bzw. im welchem Alterbereich liegst du?

Gruß, noisefloor
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

noisefloor hat geschrieben: @gurulux: Eins würde mich noch interessieren - du erwähnst mehrfach dein Alter. Wie alt bis du denn bzw. im welchem Alterbereich liegst du?
Er schrieb doch, dass er die "5" vorne hat. Also 50 < alter < 60 :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Hyperion: Es stand keine Basis dabei. :-D
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Hyperion hat geschrieben:Er schrieb doch, dass er die "5" vorne hat. Also 50 < alter < 60 :-)
Eher: 50 ≤ alter < 60 ;-)
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Er schrieb doch, dass er die "5" vorne hat. Also 50 < alter < 60
Ups, überlesen, sorry.
BlackJack hat geschrieben:Es stand keine Basis dabei.
Wenn's Hex-Basis ist, dass ist es _wirklich_ ein stolzes Alter ;-)

Gruß, noisefloor
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

noisefloor hat geschrieben:Wenn's Hex-Basis ist, dass ist es _wirklich_ ein stolzes Alter ;-)
Oder auch nicht (0x5).
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

nomnom hat geschrieben:
Hyperion hat geschrieben:Er schrieb doch, dass er die "5" vorne hat. Also 50 < alter < 60 :-)
Eher: 50 ≤ alter < 60 ;-)
Pedant :-P
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
gurulux
User
Beiträge: 12
Registriert: Samstag 21. Januar 2012, 17:34

Hallo zusammen,

mein Alter, ooh... 54, sorry,
hätte ich schonmal angeben sollen..

Mittlerweile habe ich es nun fertigbekommen.
Danke nochmal an alle Tipp-Geber, ist nun
auf die anständige Weise mittels "Wrapper"
erstellt.
Hat einige Zeit und viel lesen in Anspruch
genommen, aber dann bin ich i-wann bei
lambda: ausgekommen. Auch partial hatte
mich schon zum Ziel gebracht, aber mit
lambda konnte man sich zusätzlichhes import
ersparen und von daher weniger Code zum
Abarbeiten verursachen.

Schönen Tag noch,
Gruß
gu.lux
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sofern Du `lambda` als Mini-Slot-Funktion direkt im Binding von SIGNAL zu SLOT verwendest, sei gewarnt. Iirc kann so etwas zu Problemen führen bei PyQt.. ich meine dazu mal etwas gelesen zu haben. Vielleicht kann lunar da für Aufklärung sorgen?

Also etwa bei Konstrukten wie diesem hier:

Code: Alles auswählen

self.ui.textfield.textChanged.connect(lambda text: something)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
gurulux
User
Beiträge: 12
Registriert: Samstag 21. Januar 2012, 17:34

Im moment sieht es so aus:

Code: Alles auswählen

QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), lambda: buttonhot(9))
QtCore.QObject.connect(self.ui.pushButton_2, QtCore.SIGNAL("clicked()"), lambda: buttonhot(10))
in einem Tuppel sind die strings für die funktion buttonhot() hinterlegt. Somit muss ich nur eine funktion
für alle Tasten haben, da je nach gedrückter Taste der passende String abgeliefert wird und dann in einem
String mit dem Rest der Pfadangabe zusammen gesetzt wird. Das Resultat wird dann an os.system()
übergeben und auch so ausführt, wie ich es möchte.

Da ich keine IR-Fernbedienungen nutze, habe ich bisher keine beinträchtingungen erkannt.
Aber danke für den Hinweis, sollte es zu Problemen kommen, werde ich mich gern daran
erinnern.

gruss
gu.lux
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du solltest Dir die neue Semantik von "connect" angewöhnen:

Code: Alles auswählen

# alt
QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), lambda: buttonhot(9))
# neu
self.ui.pushButton.clicked.connect(lambda: buttonhot(9))
Die ist viel besser zu lesen und zudem zukunftssicherer.

Eigentlich gibt es genau dafür `partial` - der import würde mir da keine Sorgen machen.

Anstelle von `os.system` würde ich Dir zudem das `subprocess`-Modul vorschlagen :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
gurulux
User
Beiträge: 12
Registriert: Samstag 21. Januar 2012, 17:34

Hallo Hyperion,

werde ich sicher probieren, habe mich hierbei jedoch in der Hauptsache an die Doku`s zu PyQt
in den versch. Sprachen gehalten, ebenso wie an entsprechen gefundene Tutorials.
Aber man kann ja immer dazu lernen :)
Das mit Subprocess hatte ich auch gelesen, war mir aber für mein Gefühl zu viel, da
ich nicht vorhabe, "returns" aus dem Prozess abzufragen oder zu verwerten. Nichts desto
Trotz, werde ich mir auch dazu die Doku nochmal genauer ansehn.

:)
Antworten