QT mit eric4

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Panix91
User
Beiträge: 7
Registriert: Donnerstag 1. Dezember 2011, 14:00

Hallo zusammen, ich bin relativ neu in der Programmierung und wollte mit Freunden ein größeres Projekt verwirklichen.
Dazu habe ich mir eric4 als IDE rausgesucht, weil das für größere Projekte gut sein soll.

Soweit so gut. Das Problem ist jetzt, wenn ich normalen Python Code ausführe klappt das wunderbar, nur wenn ich PySide-Code und QT-Code ausführe will (wie bei dem Tutorial von QT beschrieben) wird mir nichts angezeigt.

Muss ich etwas bestimmtes in den Einstellungen ändern oder fehlt mir ein Plugin (was ich nicht glaube...) oder klappt das mit eric4 einfach nicht? Sollte ja eigentlich ohne Probleme funktionieren, eric4 hat sogar QT integriert.

Oder wenn es einfache(re) Wege gibt sowas zu verwirklichen wäre ich auch für Hilfe sehr dankbar :-).

Ich hoffe mein Problem ist verständlich... Danke schonmal im Voraus.

MfG, Panix
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo Panix91, willkommen im Forum,

Na oder dein Code ist falsch. Zeig doch mal den Code, dann kann man vielleicht was sagen :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also "funktioniert nicht" ist nun mal keine gute Fehlerbeschreibung. Was sollen wir damit anfangen? Du musst detailliert beschreiben, was Du tust und was dann passiert. Ggf. die genaue Fehlermeldung kopieren und hier einfügen.

Funktioniert das Script denn, wenn Du es aus einer Shell manuell aufrufst?

Und welches Tutorial von Qt meinst Du? Denn Qt ist nativ eine Lib für C++ - d.h. da ist sicherlich nichts zum Ausführen unter Python beschrieben. Also solltest Du da exakt verlinken.

Generell halte ich es für keine gute Idee, sich sofort mit GUI-Programmierung zu befassen. Alleine, dass Du "eric4" als IDE gewählt hast, weil das "für größere Projekte gut sein soll" und "Qt (kleiner "t"!) integriert hat" spricht imho Bände für Deine Unerfahrenheit.

Man braucht in Python grundsätzlich nur einen guten Texteditor und kann damit schon ziemlich viel anstellen. Eine IDE wird erst dann sinnvoll, wenn man sie entweder schon gewohnt ist, oder die speziellen Tools auch zu nutzen weiß. Ansonsten bedeutet sie erst einmal viel Overhead beim Erlernen der Funktionalität, welches es für einen Einsteiger doppelt so komplex macht. Immerhin muss er sich ja vor allem auf die Sprache konzentrieren.

Also mein Rat wäre, sich erst einmal Python anzueignen und dann den Schritt in die GUI-Programmierung zu wagen.

Wenn Du da dennoch weitermachen willst, solltest Du Dich ein wenig von "erci4" lösen - zumindest, wenn Du hier im Forum über "Fehler" diskutieren willst. Denn so weit ich weiß nutzt hier keiner "eric4" und vor allem muss man klar zwischen Fehler in der IDE oder deren Benutzung und Fehlern im eigentlichen Python-Projekt trennen können.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Panix91
User
Beiträge: 7
Registriert: Donnerstag 1. Dezember 2011, 14:00

Also, die Datei heißt Hello.py un der Code:

Code: Alles auswählen

#!/usr/bin/python
 
# Import PySide classes
import sys
from PySide.QtCore import *
from PySide.QtGui import *
 
 
# Create a Qt application
app = QApplication(sys.argv)
# Create a Label and show it
label = QLabel("Hello World")
label.show()
# Enter Qt application main loop
app.exec_()
sys.exit()
Dann mit F2 und Enter usw. ausführen.
deets

Funktioniert das denn von der Kommandozeile aus?
Panix91
User
Beiträge: 7
Registriert: Donnerstag 1. Dezember 2011, 14:00

Ja, unerfahren bin ich natürlich noch. Davor habe ich IDLE benutzt, was ich eigentlich ganz gut fande. Da hat das ohne Probleme geklappt, da kam dann schön das kleine Fesnter neben der Shell und gut war (Außer dass wegen dem sys.exit am Ende auch ne Fehlermeldung kam, nach dem Schließen des Fensters:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:/Python27/Hello", line 16, in <module>
    sys.exit()
SystemExit
)

Bei eric4 kam garnichts, aber ich hab auch keine Probleme damit IDLE zu benutzen, oder KWriter (was mir ein Freund empfohlen hat).

Ich mach das über die Seite hier: http://developer.qt.nokia.com/wiki/Hell ... _in_PySide

@ deets:

Ich mach das weniger von der Kommandozeile aus, lieber über IDLE...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Panix91 hat geschrieben: Ich mach das weniger von der Kommandozeile aus, lieber über IDLE...
Starte das mal dennoch aus der Kommandozeile! Denn da kannst Du Seiteneffekte der IDE ausschließen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
deets

@Panix91

Das du das gerne machst, ist ja schoen und gut. Aber erstmal muss man ausschliessen, dass es Seiteneffekte durch die IDE gibt.
Panix91
User
Beiträge: 7
Registriert: Donnerstag 1. Dezember 2011, 14:00

Ja klar, aber wie gesagt, wenn ich genau die selbe Datei über IDLE starte klappt es :-).
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Panix91 hat geschrieben:Ja klar, aber wie gesagt, wenn ich genau die selbe Datei über IDLE starte klappt es :-).
Wir meinten aber auch die "echte" OS-Shell; also unter Windows "cmd".

Dann ist eben etwas an "F2" nicht korrekt. Kannst Du damit denn andere Programme aus "eric4" starten? Du musst da ggf. noch mal die Doku von "eric4" konsultieren, ob es da evtl. etwas zu beachten gibt.

Wie schon gesagt, musst Du Dich jetzt mit einem Problem rumquälen, welches Du eigentlich nicht lösen müsstest, wenn Du auf die IDE oder zumindest dieses Feature der IDE verzichtetest.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
deets

Also, wenn derselbe Code in IDLE laeuft, aber nicht in Eric, dann hat Eric da ein problem. Da wuerde ich dir empfehlen, dich direkt an Detlev Offenbach zu wenden, der klaert das bestimmt.
Panix91
User
Beiträge: 7
Registriert: Donnerstag 1. Dezember 2011, 14:00

Okay, ich denke das werde ich dann wohl mal tun... wenns später mal besser läuft mit dem Programmieren dann kann ich ja nochmal darauf zurückkommen :-). Von der Konsole aus geht es übrigens auch ohne Probleme (ich benutze openSuse)

Ist IDLE denn dafür gut geeignet? Wenigstens zeigt es mir da die Qt-Layouts an...

I-wie geht die Qt-Website auch grade nicht, sonst würde ich noch nen Code posten der bei mir nicht will. Falls jemand den Code aus dem Tutorial kennt mit dem Close-Button, wenn ich Close drücke, dannbringt er mir ne Fehlermeldung die ich grade nicht posten kann, weil ich den Code nicht habe...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also ich habe den Sinn von Idle nie verstanden - aber vielleicht bin ich da auch komisch.

Layouts erstellst Du doch eh mit dem QtDesigner - zumindest solltest Du das in Betracht ziehen.

Dann braucht es doch nur noch einen Editor und eine offene Shell und Du hast alles, was Dein Herz begehrt. Mit Alt+TAB mal schnell vom Editor in eine Shell wechseln und das Script zu starten¹ ist doch ein Klacks. Manche Editoren haben ja sogar eine Shell eingebaut...

¹ nach einmaliger Eingabe kommst Du dann ja sogar per "Pfeil nach Oben"-Taste dank der Bash-History sogar noch einfach dran.

Bei so einer Infrastruktur frage ich mich halt, was einem Idle da spezielles bringt?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Panix91
User
Beiträge: 7
Registriert: Donnerstag 1. Dezember 2011, 14:00

Ja klar, die Layouts erstelle ich so, aber ich weiss eben nicht wie ich da mit den Slots und Signalen arbeiten kann, ich muss einem drücken ja auch per "click()" eine Funktion zuweisen. Das Problem ist dann auch, dass ich dazu kein gescheites Tutorial finde. Man findet ein Tutorial in C++, oder wie man die einzelnen Widgets und Designer schön rumschiebt, bringt mir aber nichts.

Kannst du das vielleicht erklären oder mir ein gutes Tutorial zeigen?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Panix91 hat geschrieben: Kannst du das vielleicht erklären oder mir ein gutes Tutorial zeigen?
Das hat ja nun nichts mehr mit der eigentlichen Frage zu tun. Im übrigen kann man im QtDesigner Standard-Signale und -Slots bereits im Editor verbinden, z.B. im `QMainWindow` den `close`-Slot mit einem `triggered`-Signal einer selbstdefinierten `QAction`. Wenn man dann aus dem UI-File den Quellcode generiert, sieht man ja, wie Qt das zusammenfügt.

Grundsätzlich schau doch mal über die PySide-Seite. Da wird das eigentlich ganz gut erklärt. Zusätzlich kannst Du auch ins PyQt-Reference Handbook gucken. Dort wird das iirc auch gut erklärt (beachte aber die New-Style-Semantik).

Grundsätzlich gilt immer:

Code: Alles auswählen

object.signal.connect.slot
wobei alles bis auf das "connect" natürlich variabel ist.

Für neue Fragen solltest Du aber in Zulunft einen neuen Thread aufmachen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Panix91
User
Beiträge: 7
Registriert: Donnerstag 1. Dezember 2011, 14:00

Okay, vielen Dank. Falls ich noch Fragen habe werde ich nochmal schreiben :-).
Antworten