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

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
gurulux
User
Beiträge: 12
Registriert: Samstag 21. Januar 2012, 17:34

Hallo allesamt,
wie gesagt bin ich gerade im Zuge der Umstellung auf Ubuntu statt Win****,
auf Python gestossen. Da ich beim lesen erfahren habe, dass Python,sowie Qt
plattformunabhängig sein sollen, ist die Begeisterung mit mir durchgegangen.

GROSSER Fehler....
Schon stosse ich an meine Grenzen(bin nicht mehr der jüngsten Einer :))
Mittels Qt-Designer habe ich mir eine FORM gemacht, mit drei Button.
Den EXIT auch zum EXIT zu bewegen, war nicht schwer, bei den anderen
bin ich am Ende.
Ich nutze z.Zt.:
Qt-Designer 4.6.2
Python 2.6.5
pyiuc4
Kubuntu 10.04 LTS

Mein Code, grossteils durch Designer und pyuic generiert:

Code: Alles auswählen

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Wizza.ui'
#
# Created: Sat Jan 21 17:59:29 2012
#      by: PyQt4 UI code generator 4.7.2
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui
import os

class Ui_WIZZARD(object):
    def setupUi(self, WIZZARD):
        WIZZARD.setObjectName("WIZZARD")
        WIZZARD.resize(380, 100)
        WIZZARD.setMinimumSize(QtCore.QSize(380, 100))
        WIZZARD.setMaximumSize(QtCore.QSize(380, 100))
        WIZZARD.setAutoFillBackground(False)
        WIZZARD.setStyleSheet("None")
        self.Button_li = QtGui.QPushButton(WIZZARD)
        self.Button_li.setGeometry(QtCore.QRect(0, 0, 50, 50))
        self.Button_li.setText("")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("Bilder/Wizzard/Winkl-Li.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.Button_li.setIcon(icon)
        self.Button_li.setIconSize(QtCore.QSize(24, 24))
        self.Button_li.setObjectName("Button_li")
        self.Button_re = QtGui.QPushButton(WIZZARD)
        self.Button_re.setGeometry(QtCore.QRect(50, 0, 50, 50))
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("Bilder/Wizzard/Winkl-Re.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.Button_re.setIcon(icon1)
        self.Button_re.setIconSize(QtCore.QSize(24, 24))
        self.Button_re.setObjectName("Button_re")
        self.Button_RAUS = QtGui.QPushButton(WIZZARD)
        self.Button_RAUS.setGeometry(QtCore.QRect(310, 60, 70, 40))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(232, 8, 4))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(232, 8, 4))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 255, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush)
        brush = QtGui.QBrush(QtGui.QColor(232, 8, 4))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
        brush = QtGui.QBrush(QtGui.QColor(151, 150, 149))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush)
        self.Button_RAUS.setPalette(palette)
        font = QtGui.QFont()
        font.setPointSize(11)
        font.setWeight(75)
        font.setBold(True)
        self.Button_RAUS.setFont(font)
        self.Button_RAUS.setObjectName("Button_RAUS")

        self.retranslateUi(WIZZARD)
        QtCore.QObject.connect(self.Button_RAUS, QtCore.SIGNAL("clicked()"), WIZZARD.close)
        QtCore.QObject.connect(self.Button_li, QtCore.SIGNAL("pressed()"), WIZZARD.update)
        QtCore.QObject.connect(self.Button_re, QtCore.SIGNAL("pressed()"), button_hot('wre'))
        QtCore.QMetaObject.connectSlotsByName(WIZZARD)

    def retranslateUi(self, WIZZARD):
        WIZZARD.setWindowTitle(QtGui.QApplication.translate("WIZZARD", "Wizzard", None, QtGui.QApplication.UnicodeUTF8))
        self.Button_RAUS.setText(QtGui.QApplication.translate("WIZZARD", "EXIT", None, QtGui.QApplication.UnicodeUTF8))

def button_hot(par):
    os.sytem("xmacroplay :0.0 < ~/Bilder/"&par&".txt")

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    WIZZARD = QtGui.QWidget()
    ui = Ui_WIZZARD()
    ui.setupUi(WIZZARD)
    WIZZARD.show()
    sys.exit(app.exec_())
Der Aufruf:
-tux:~$ python Wizza.py
hat diese Ausgabe zu Folge:

Code: Alles auswählen

hat diese Ausgabe zu Folge:
Traceback (most recent call last):
  File "w-Wizza.py", line 83, in <module>
    ui.setupUi(WIZZARD)
  File "w-Wizza.py", line 68, in setupUi
    QtCore.QObject.connect(self.Button_re, QtCore.SIGNAL("pressed()"), button_hot('wre'))
  File "w-Wizza.py", line 76, in button_hot
    os.sytem("xmacroplay :0.0 < ~/Bilder/"&par&".txt")
AttributeError: 'module' object has no attribute 'sytem'
wie man sieht, bekomm ich keine Probleme, solange ich bei reinen Qt-Slots bleib.
Will ich aber wo anders etwas auslösen, ist es zu Ende.
Also lasse ich die
QtCore.QObject.connect(self.Button_re, QtCore.SIGNAL("pressed()"), button_hot('wre'))
stattdessen als:
QtCore.QObject.connect(self.Button_re, QtCore.SIGNAL("pressed()"), WIZZARD.update)
laufen gibts keine Meldungen, wenn ich auch den Teil hier

Code: Alles auswählen

def button_hot(par):
    os.sytem("xmacroplay :0.0 < ~/Bilder/"&par&".txt")
rauslasse.
Allerdings habe ich dann ja auch nix funktionierendes...

Könnt Ihr mir bitte erklären wo ich meine Fehler mache ??
Schonmal vielen Dank vorab,

gruss
gu.lux
lunar

@gurulux: Lies die Fehlermeldung.

WARNING! All changes made in this file will be lost! steht im Übrigen nicht zum Spaß am Anfang der Datei, es nicht Sinn der Sache, die vom Designer erzeugte Quelltextdatei zu editieren. Stattdessen hält man sich an die Dokumentation.

Und was in Gottes Namen hast Du Dir denn mit den ganzen "WIZZARD"-Argument gedacht?! Der Quelltext sieht ehrlich gesagt nicht so aus, als würdest Du Python soweit beherrschen, dass Du eine graphische Oberfläche programmieren kannst.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

gurulux hat geschrieben: Könnt Ihr mir bitte erklären wo ich meine Fehler mache ??
Ja, Du willst zu viel auf einmal! Lerne doch erst einmal die Grundlagen von Python und lass die Finger von GUIs! Dazu ganz aktuell mal ein Link.

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 ;-)

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.
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

OK, danke,

ich bin halt noch VB2005 gewohnt.
Also bleibe ich besser dabei und Win****.
Es sollte mir ds leben eim wenig vereinfachen bei einem Flash Spielchen.

Thread hat sich damit erledigt.

Trotzdem Danke für eure Anmerkungen.

Gruss
gu-lux
Zuletzt geändert von gurulux am Samstag 21. Januar 2012, 19:15, insgesamt 1-mal geändert.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Es heißt nicht `os.sytem()`, sondern `os.system()`. ;)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

gurulux hat geschrieben: Also bleibe ich beseer dabei und Win****.
Was hat Deine Problematik mit dem verwendeten OS zu tun? *wunder*
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hyperion hat geschrieben:
gurulux hat geschrieben: Also bleibe ich beseer dabei und Win****.
Was hat Deine Problematik mit dem verwendeten OS zu tun? *wunder*
Der Satz ergibt, wenn man nicht gerade die vorherige Zeile auslässt, durchaus Sinn: Visual Basic ist halt ne Windows-Geschichte. Wenn er dabei bleiben will, sollte er logischerweise auch bei Windows (zur Programmierung in dieser Sprache) bleiben.
gurulux
User
Beiträge: 12
Registriert: Samstag 21. Januar 2012, 17:34

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.
Das ist schade, aber wenn ihr meint, mache ich es so .
Es war nur für mich ein erster Weg, mch mit neuem, eben auf verschiedenen Systemen
zu verwendenden Mitteln zu befassen.
Tut mir Leid, wenn ich euch damit in grosses Entsetzen gestürtzt habe.

Da sieht man wieder, das Alter eben nicht vor Unfug schützt :)

Bitte um eine harte, aber gerechte Bestrafung ;)

P.S. Habe mich natürlich auch in den letzten Wochen soweit zietl. möglich,
mit Tutorien und den entsprechenden Lektüren befasst. Das ich dabei so sehr
daneben gelegen habe, haabe ich icht geahnt.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Also bleibe ich besser dabei und Win****.
Was bei Qt ja wirklich schön ist: Es ist in der Tat sehr cross-plattform Kombatibel. Oder anders gesagt: Den gleichen Fehler kriegst du auch, wenn du das Prog unter Windows ausführst. ;-)

Gruß, noisefloor
gurulux
User
Beiträge: 12
Registriert: Samstag 21. Januar 2012, 17:34

noisefloor hat geschrieben:Hallo,

Was bei Qt ja wirklich schön ist: Es ist in der Tat sehr cross-plattform Kombatibel. Oder anders gesagt: Den gleichen Fehler kriegst du auch, wenn du das Prog unter Windows ausführst. ;-)

Gruß, noisefloor
Gut, verstanden, nachdem ihr mir nun deutlich klar gemacht habt,
dass es nicht funktioniert, gint es jemand der bereit ist, mir den
richtigen Weg anzuzeigen? Ich erwarte keine fertige Lösung, aber
Hinweise auf das richtige Vorgehen wären schon ein ansändiger Zug.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

gurulux hat geschrieben: Das ist schade, aber wenn ihr meint, mache ich es so .
Du musst doch wissen, was Du willst und was Dir wichtig ist!?! Wir können Dir nur die Empfehlung geben, dass Du erst Python lernst und Dich dann, wenn die Grundlagen einigermaßen sitzen, Dich mit Qt befassen solltest. Wir können aber doch nicht für Dich entscheiden oder nur ahnen, was für Dich der beste Weg ist!
gurulux hat geschrieben: Gut, verstanden, nachdem ihr mir nun deutlich klar gemacht habt,
dass es nicht funktioniert, gint es jemand der bereit ist, mir den
richtigen Weg anzuzeigen? Ich erwarte keine fertige Lösung, aber
Hinweise auf das richtige Vorgehen wären schon ein ansändiger Zug.
Hast Du lunars Posting nicht gelesen? Der hat Dir doch den Link zur Antwort gegeben - mehr Silbertablett geht ja kaum...
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

ok, danke..

Sorry... aber mit der 5 vorne ist man eben nicht mehr so schnell mit lesen..

danke und bye-bye.

[CLOSE]
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

gurulux hat geschrieben:Es war nur für mich ein erster Weg, mch mit neuem, eben auf verschiedenen Systemen
zu verwendenden Mitteln zu befassen.
Wenn du Linux über eine Programmiersprache kennen lernen willst, ist Python an sich schon eine gute Wahl. Es ist quasi auf jedem modernen Linux-System vorinstalliert und kommt auch häufig in den systeminternen Skripten zum Einsatz. Du könntest natürlich mit C als Sprache noch viel näher am System programmieren, doch ich glaube nicht, dass du das wirklich willst. Python ist ja auch keine Sprache zur Systemprogrammierung. Vermutlich meintest du den Satz auch etwas anders...
gurulux hat geschrieben:Das ich dabei so sehr
daneben gelegen habe, haabe ich icht geahnt.
Du hast nicht danebengelegen. Der Tenor der "Bestürzten" ist einfach nur, dass Python *und* Qt etwas viel auf einmal für den Anfang sind. Lern erstmal einigermaßen Python, finde (hoffentlich) Gefallen daran und mache dich dann an die grafische Oberfläche. Das beides sind nämlich 2 Paar Schuhe. Und wenn du in den Python-Stiefeln schon nicht richtig laufen kannst, dann solltest du die GUI-Programmierung am Besten erstmal auf später verlegen.
gurulux
User
Beiträge: 12
Registriert: Samstag 21. Januar 2012, 17:34

Habt Recht,

werde mich weiter mit Lesen und Probieren befassen.

Habe mich eben zu sehr verleiten lassen:

http://sourceforge.net/apps/mediawiki/f ... g_creation
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
Antworten