erste qt gui

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

ich hab grade angefangen mch mit einer gui zu beschäftigen ich hab mit dem Qt-Desigener und pyuic folgenden script erstellt:

Code: Alles auswählen

#! /usr/bin/python
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file '/media/Daten_Pogramme/testl.ui'
#
# Created: Di Aug 24 09:45:24 2010
#      by: The PyQt User Interface Compiler (pyuic) 3.18.1
#
# WARNING! All changes made in this file will be lost!

import PyQt4 
class Ui_notepad(object):
    def setupUi(self, notepad):
        notepad.setObjectName("notepad")
        notepad.resize(800, 600)
        self.centralwidget = QtGui.QWidget(notepad)
        self.centralwidget.setObjectName("centralwidget")
        self.button_open = QtGui.QPushButton(self.centralwidget)
        self.button_open.setGeometry(QtCore.QRect(10, 0, 93, 27))
        self.button_open.setObjectName("button_open")
        self.pushButton_2 = QtGui.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(110, 0, 93, 27))
        self.pushButton_2.setCheckable(False)
        self.pushButton_2.setChecked(False)
        self.pushButton_2.setObjectName("pushButton_2")
        self.editor_window = QtGui.QTextEdit(self.centralwidget)
        self.editor_window.setGeometry(QtCore.QRect(140, 140, 331, 291))
        self.editor_window.setObjectName("editor_window")
        notepad.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(notepad)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
        self.menubar.setObjectName("menubar")
        notepad.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(notepad)
        self.statusbar.setObjectName("statusbar")
        notepad.setStatusBar(self.statusbar)

        self.retranslateUi(notepad)
        QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL("clicked()"), notepad.close)
        QtCore.QMetaObject.connectSlotsByName(notepad)

    def retranslateUi(self, notepad):
        notepad.setWindowTitle(QtGui.QApplication.translate("notepad", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
        self.button_open.setText(QtGui.QApplication.translate("notepad", "oeffnen", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton_2.setText(QtGui.QApplication.translate("notepad", "schleisen", None, QtGui.QApplication.UnicodeUTF8))

um das Fenster aufzurfen verwende ich diesen script:

Code: Alles auswählen

#! /usr/bin/python
import sys
from PyQt4 import *
from edytor import Ui_notepad

class StartQT4(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_notepad()
        self.ui.setupUi(self)


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = StartQT4()
    myapp.show()
    sys.exit(app.exec_())

nun gibt mir die konsole folgende fehlermeldung:
Traceback (most recent call last):
File "/media/Daten_Pogramme/editortest/start.py", line 6, in <module>
class StartQT4(QtGui.QMainWindow):
NameError: name 'QtGui' is not defined

kann mir jemand helfen schon mal daanke im vorraus
BlackJack

@ceddy: Du musst `QtGui` explizit importieren, dass geht nicht mit dem ``*``. Sternchen-Importe sollte man sowieso vermeiden.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

In den generierten Dateien sollte man auch nichts aendern, da man sonst den Vorteil verliert den Designer zu verwenden, der eben nur auf den `ui`-Dateien arbeitet, anders kann ich mir jedenfalls nicht erklaeren, dass der Import dort falsch ist, der sollte `from PyQt4 import QtGui, QtCore` heissen.

UI-Dateien kann man auch dynamisch einbinden, die Forensuche verraet dir mehr.

P.S. Willkommen im Forum!
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

danke abber wen ich das änder bekomm ih die fehlermeldung:
File "/media/Daten_Pogramme/editortest/start.py", line 15, in <module>
myapp = StartQT4()
File "/media/Daten_Pogramme/editortest/start.py", line 10, in __init__
self.ui.setupUi(self)
File "/media/Daten_Pogramme/editortest/edytor.py", line 16, in setupUi
self.centralwidget = QtGui.QWidget(notepad)
NameError: global name 'QtGui' is not defined
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Wie ich schon geschrieben habe ist der Import in `edytor.py` ebenfalls kaputt.
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

super jez gehts danke für die schnellen antworten ; :wink:
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

ich hab jez den ersten slot engerichtet:

Code: Alles auswählen

#! /usr/bin/python
import sys
from PyQt4 import QtGui, QtCore
from editor import Ui_notepad

class StartQT4(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_notepad()
        self.ui.setupUi(self)
	
	self.connect(self.cmdVerbinden, QtCore.SIGNAL("clicked()"), self.onOK) 


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = StartQT4()
    myapp.show()
    sys.exit(app.exec_())


es kommt nun wider eine fehlermeldung:
Traceback (most recent call last):
File "/media/Daten_Pogramme/editortest/start.py", line 17, in <module>
myapp = StartQT4()
File "/media/Daten_Pogramme/editortest/start.py", line 12, in __init__
self.connect(self.cmdVerbinden, QtCore.SIGNAL("clicked()"), self.onOK)
AttributeError: 'StartQT4' object has no attribute 'cmdVerbinden'
lunar

Verzeih mir, aber so wird das nichts. Du lernst Qt nicht, in dem Du so lange am Quelltext rumprobierst, bis es klappt.

Überlege doch bitte mal genau, wo cmdVerbinden definiert ist, und warum Dein Aufruf daher nicht funktionieren kann.
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

ich lernen ja grad etst python und hab das aus nen dummen buch un cmdVerbinden is der name des buttons
BlackJack

@ceddy: Wenn Du Python gerade erst lernst, solltest Du vielleicht noch nicht mit GUI-Programmierung anfangen. Dafür sollte man in objektorientierter Programmierung nämlich schon halbwegs fit sein. Du machst da den zweiten Schritt vor dem Ersten. Wenn nicht gar den Dritten.

Fang am besten mit Python-Grundlagen an, zum Beispiel mit dem Tutorial in der Dokumentation.

Falls das Buch zufällig das Openbook von Galileo sein sollte: Lerne daraus besser *nicht* die Grundlagen. Dazu taugt das nämlich nicht.
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

ich meine ich lerne garde erst python mit gui abber leider genau aus dem buch oO
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

naja egal habs jez trotzdem danke
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

wenn ich ein qlst widget habe und so dass aktuelle item abrufe wis bekomm ich dann sowas raus und nicht den text?
<PyQt4.QtGui.QListWidgetItem object at 0x8b99f6c>
lunar

@ceddy: In dem Du die Dokumentation zu QListWidgetItem liest ...
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

ok und wo finde ich diese ?:D
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@ceddy
in der Pastebin liegt 1 readme.txt wo erklärt wird, wie man mit q-designer 1 ausführbares File erzeugt.
http://www.python-forum.de/pastebin.php ... light=text
1 gutes Tuturium, wie man mit Python den q-designer nutzt ist
http://www.cs.usfca.edu/~afedosov/qttut
Wie die Kollegen schon sagten, als Anfänger bei python sollte man nicht mit Qt beginnen.
Mit dem q-designer werden die GUI-Oberfächen gestrickt auf sehr schnelle und sichere Weise.
Cpp ist nicht erforderlich, es ist nur hilfreich, weil die DOKU von
-PySide und
-Riverbankcomputing
in Cpp gemacht ist.
Da hab ich mich auch erst schwer getan.
Guude!
Fritz
8) 8)
lunar

@3ff: Ich wäre Dir dankbar, wenn Du nur Tutorien und Seiten empfehlen würdest, welche die aktuelle Qt-Version zum Thema haben, und nicht Qt3 oder gar Qt2. Der Anfang ist auch schwer genug, ohne das man mit fehlerhaften, weil veralteten Tutorien ringen muss.
3ff
User
Beiträge: 191
Registriert: Dienstag 22. Dezember 2009, 12:54
Wohnort: Odenwald Sued-Hessen

@lunar,
natürlich hast Du recht, aber die Seite von diesem Russen ist echt das beste, was ich gefunden habe.
Sowas müßte eigenlich von Nokia kommen, aber...
Seitdem ich dies Tutorium durchgelesen habe, weiß ich, wie die Zusammenhänge zwische cpp und py sind, was der pyuic bzw. pyuic4 macht und wie man mit dem Designer arbeitet.
Vor allem, wie man 1 Projekt angeht, eigene Funktionen einbaut und, und, und.
Das Slot/Signal Konzept ist egal bei Qt3 und Qt4 und für einfache GUI's ist der Designer wirklich gut.
Auch die Datenbankschnittstelle ist die gleiche, ich hatte allerdings (in der "Doku" gelesen, bei Qt3 wäre der Treiber für Postgre PSQL7, jetzt stellt sich heraus, die Versionen von Postgres sind abwärtskompatibel.
Grüße Fritz 8)
Antworten