Projekt Meisterhilfe

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Freitag 29. Februar 2008, 11:50

Hi Alle,

Ich bin Anfänger in Sachen Python-Qt aber habe ausreichende C++ Erfahrungen.
Mein derzeitiges Projekt welches ich in PyQt programmieren will, stellt ein paar Probleme,

Code: Alles auswählen

#!/usr/bin/env python
#
#hauptfenster.py
#
import sys
from PyQt import *
sys.path.append('./module/sys')
from workspace import *

class Hauptfenster(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.workspace=Workspace(self)
        self.setCentralWidget(self.workspace)
        self.connect(self.workspace, SIGNAL("clicked()"),
                            self.updateMenus())
        win.setWindowTitle(tr("Meisterhilfe"))
        self.createMenus()

    def updateMenus(self):
        pass

    def createMenus(self):
        pass
    
def main(args):
    app=QApplication(args)
    win=Hauptfenster()
    win.show()
    app.connect(app, SIGNAL("lastWindowClosed()"),
                        app, SLOT("quit()"))
    app.exec_loop()
Ich neheme an das mir Packete unter Debian Etch fehlen, daher kennt er so einiges was ich oben benutzte nicht.
Welche Packete benötige ich unter Debian Etch?
Zeile 16 und 18 geben nur Fehler aus.
Die Packete "python-qt3" und "python-qt4" sind bei mir bereits installiert.

Mein Hauptprogramm sieht wie folgt aus,

Code: Alles auswählen

#!/usr/bin/env python
#
#startGUI.py
#
import os
import sys
sys.path.append('./module/sys')
import hauptfenster

if os.name == 'posix':
    print "Linux System wurde erkannt."
    print "Starte meisterhilfe Programm."
    if __name__ == "__main__":
        hauptfenster.main(sys.argv)
    
elif os.name == 'nt':
    print "Windows System wurde erkannt."
    print "Starte meisterhilfe Programm."
else:
    print "Konnte Betriebssystem nicht erkennen ! ! !"
    print "Das Programm meisterhilfe wurde nicht gestartet."

Grüße Markus
Zuletzt geändert von feldmaus am Freitag 29. Februar 2008, 12:15, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Freitag 29. Februar 2008, 12:08

Interessant waren mal die Fehlermeldungen ;)
/dev/kristallkugel sagt mir nämlich so nichts!
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Freitag 29. Februar 2008, 12:13

Zunächst mal werden sich bei einigen sicher die Nackenhaare aufstellen wegen den Sternchen Imports. Das hab ich auch kürzlich gelernt ;)

Als nächstes importierst du PyQt, damit dürftest du wohl auf Qt3 zugreifen, nicht auf Qt4. Ich denke nicht das dir was fehlt sondern das du self.SIGNAL bzw self.tr verwenden musst. Ist jetzt aber ins Blaue geraten

Ich empfehle Dir mal einen Blick auf die Exampels die mitgeliefert werden (sollten)

/usr/share/doc/python-qt4-doc/examples/

hier mal ein einfaches Beispiel

Code: Alles auswählen

#!/usr/bin/env python

# PyQt tutorial 4


import sys
from PyQt4 import QtCore, QtGui


class MyWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setFixedSize(200, 120)

        self.quit = QtGui.QPushButton("Quit", self)
        self.quit.setGeometry(62, 40, 75, 30)
        self.quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold))

        self.connect(self.quit, QtCore.SIGNAL("clicked()"),
                     QtGui.qApp, QtCore.SLOT("quit()"))


app = QtGui.QApplication(sys.argv)
widget = MyWidget()
widget.show()
sys.exit(app.exec_())

Code: Alles auswählen

import sys
from PyQt4 import QtCore, QtGui

import dockwidgets_rc


class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        
        self.textEdit = QtGui.QTextEdit()
        self.setCentralWidget(self.textEdit)
        
        self.createActions()
        self.createMenus()
        self.createToolBars()
        self.createStatusBar()
        self.createDockWindows()
        self.setWindowTitle(self.tr("Dock Widgets"))
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Freitag 29. Februar 2008, 12:13

feldmann_markus hat geschrieben: Welche Packete benötige ich unter Debian Etch?
Ich habe die Packete,
python-qt-dev
python-qt4-dev
installiert.

Allerdings zeigt er mir den foldenden Fehler an,
  • TypeError: argument 3 of QObject.connect() has an invalid type
BlackJack

Freitag 29. Februar 2008, 12:17

Da sollte man wahrscheinlich eine Funktion/Methode angeben. Du übergibst in Zeile 17 im ersten Beitrag aber das `None`-Objekt weil das der Rückgabewert der Methode ist, die Du *aufrufst*. Das solltest Du lassen. :-)
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Freitag 29. Februar 2008, 12:40

burli hat geschrieben: Als nächstes importierst du PyQt, damit dürftest du wohl auf Qt3 zugreifen, nicht auf Qt4.
Nach ein paar Änderungen habe ich den Pfaden verloren und Fehler gewonnen. :-)
Tut mir leid Jungs ich bin Heute irgendwie verwirrt.
  • ImportError: No module named PyQt

Code: Alles auswählen

#!/usr/bin/env python
#
#hauptfenster.py
#
import sys
from PyQt import QtCore, QtGui 
sys.path.append('./module/sys')
import workspace

class Hauptfenster(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.workspace=workspace.Hauptworkspace(self)
        self.setCentralWidget(self.workspace)
        self.connect(self.workspace, SIGNAL("clicked()"),
                            self.updateMenus(self))
        win.setWindowTitle(self.tr("Meisterhilfe"))
        self.createMenus()

    def updateMenus(self):
        pass

    def createMenus(self):
        pass
    
def main(args):
    app=QApplication(args)
    win=Hauptfenster()
    win.show()
    app.connect(app, SIGNAL("lastWindowClosed()"),
                        app, SLOT("quit()"))
    app.exec_loop()

Code: Alles auswählen

#!/usr/bin/env python
#
#workspace.py
#
import sys
from PyQt import QtCore, QtGui 

class Hauptworkspace(QWorkspace):
    def __init__(self, *args):
        apply(QWorkspace.__init__, (self,) +args)
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Freitag 29. Februar 2008, 12:42

Muss PyQt4 heißen denke ich mal
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Freitag 29. Februar 2008, 12:57

Ihr seid mir fast zu schnell mit den Antworten. :-)
Ich werde mir das Beispiel "mdi.py" aus,
/usr/share/doc/python-qt4-doc/examples/mainwindows/mdi
nochmal genauer angucken.

Grüße Markus
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Freitag 29. Februar 2008, 12:58

Ja muss es! ;)
BlackJack

Freitag 29. Februar 2008, 13:36

@feldmann_markus: Deine letzte Zeile 17 ist ja noch "fälscher". Jetzt rufst Du die Methode nicht nur auf, sonder gibst ihr auch noch ein Argument mit, dass sie gar nicht erwartet.

Falls Du objektorientierte Programmierung noch nicht drauf hast, solltest Du das unbedingt lernen *bevor* Du anfängst Dich mit GUIs zu beschäftigen.
Gnushi
User
Beiträge: 77
Registriert: Dienstag 12. Dezember 2006, 09:49

Freitag 29. Februar 2008, 14:16

feldmann_markus hat geschrieben:Allerdings zeigt er mir den foldenden Fehler an,
  • TypeError: argument 3 of QObject.connect() has an invalid type
Statt:

Code: Alles auswählen

self.connect(self.workspace, SIGNAL("clicked()"), 
    self.updateMenus(self)) 
so:

Code: Alles auswählen

self.connect(self.workspace, SIGNAL("clicked()"),
    self.updateMenus) 
(Has Du auch Python-qt4 installiert?)

Gruß

GnuShi
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Freitag 29. Februar 2008, 18:21

Die benötigten Pakete heißen in debian:
python-qt4 bzw python-qt3

Sie sind beide in Etch enthalten:
Debian Paketsuche nach python-qt
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Freitag 29. Februar 2008, 22:25

BlackJack hat geschrieben: Falls Du objektorientierte Programmierung noch nicht drauf hast, solltest Du das unbedingt lernen *bevor* Du anfängst Dich mit GUIs zu beschäftigen.
Ich sehe das so,
wer Fehler macht der lernt. :-)
Auch Kinder kannst du nicht immer hinterher laufen um sie vor allen Gefahren zu schützen, sie müßen manchmal einfach die Hand ins Feuer halten um zu lernen das Feuer gefährlich ist. Besser ist es dem Kind zu erklären warum es gefährlich ist als zu sagen lass das.

Wenn ich was falsch gemacht habe sage mir was ich falsch gemacht habe und warum das falsch ist. :D Ich habe C++ gelernt, war allerdings nicht der Hellste. Ich traue mir aber viel zu. Schakka ich schaff das. :-)
Zuletzt geändert von feldmaus am Freitag 29. Februar 2008, 22:34, insgesamt 1-mal geändert.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Freitag 29. Februar 2008, 22:31

Mr_Snede hat geschrieben:Die benötigten Pakete heißen in debian:
python-qt4 bzw python-qt3
Beide habe ich. Die Devel Packete sind glaube ich auch notwendig.
Weiss Jemand wie ich Eric3 konfigurieren muß damit er mit PyQt4 zusammenarbeitet?
Ich habe die Beispiele von "Python-qt4-doc" einmal mit Eric3 gestartet und danach in der Konsole. In der Konsole gings und bei Eric3 hat er einen Fehler raußgeschmissen.
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Freitag 29. Februar 2008, 22:37

Wieso Eric3? Eric3 ist Qt3, Eric4 ist Qt4. Ich würde einfach mal sagen vergiss Qt3 und konzentrier dich auch Qt4

Für Eric4 braucht man allerdings einiges. vorher brauchst du noch Sip4 und Qscintilla, jeweils die aktuellste Version. Ist alles hier zu finden
Antworten