Frage zu python code erstellt durch qt designer

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Duall777
User
Beiträge: 7
Registriert: Freitag 20. Februar 2015, 13:47

Hallo als neuling hier im Forum grüße ich alle zusammen,

ich habe vor kurzem erst angefangen GUIs mit python zu programmieren und habe da eine verständnis Frage.
ich habe mir mit dem qtdesigner eine einfache GUi erstellt und nach dem konwertieren von .ui Fromat ins .py-format folgenden code erhalten

Code: Alles auswählen

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(226, 189)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.lineEdit = QtGui.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(10, 30, 113, 20))
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
        self.lineEdit_2 = QtGui.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(10, 80, 113, 20))
        self.lineEdit_2.setObjectName(_fromUtf8("lineEdit_2"))
        self.lineEdit_2.setEchoMode(QtGui.QLineEdit.Password)
der code ist geht noch etwas weiter aber dort sind nur weiter widget deklarationen und eine methoden deklaration.
was ich nicht verstehe ist der obere teil der nach der import-zeile kommt, also die beiden try-blöcke. kennt sichd a jemand hier aus?
ich würd mich sehr freuen über eine kurze erklärung

Viele Grüße

Duall777
BlackJack

@Duall777: Da werden halt abhängig vom Vorhandensein von Attributen auf Qt-Objekten zwei Funktionen definiert. Ich gehe mal stark davon aus das hier der Unterschied zwischen Python 2 und Python 3 abgefangen wird was `str`/`unicode` versus `bytes`/`str` angeht.

Eigentlich würde man aber lieber das `PyQt4.uic`-Modul verwenden um die ``*.uic``-Datei dynamisch zu laden statt Quelltext zu generieren. Der ist ja sowieso nicht unbedingt für menschliche Leser gedacht.
Duall777
User
Beiträge: 7
Registriert: Freitag 20. Februar 2015, 13:47

Hi danke für deine antwort,

tut mir leid wenn ich dumm frage aber könntest du da etwas genauer daruf eingehen also zum beispiel warum wird in zeile 19 das mainwindow definiert mit

Code: Alles auswählen

MainWindow.setObjectName(_fromUtf8("MainWindow"))
anstatt mit

Code: Alles auswählen

MainWindow.setObjectName("MainWindow")
muss ich das jetzt immer so machen wenn ich etwas neu erstelle oder wie?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Der generierte Code ist nicht dafür gedacht, dass du ihn irgendwie händisch bearbeitest. Den musst du nicht im Detail verstehen. Am besten ist es aber, darauf hat BlackJack schon hingewiesen, wenn du dir erst gar keinen Python-Code erzeugen lässt. Du kannst die ui-Dateien direkt laden und solltest das auch tun. So hast du eine vernünftige Trennung von Code und Daten.
Das Leben ist wie ein Tennisball.
Duall777
User
Beiträge: 7
Registriert: Freitag 20. Februar 2015, 13:47

Hi,

was ist wenn ich z.b. die aktion eines buttons programmieren will, dann muss ich ja, wenn ich das signal-slot-konzept verwende, den code der verbindung zwischen button und einer methode irgendwo unterbrinden. da hat sich der generierte code angeboten, indem ich dort diesen verbindungscode in den beriech geschrieben habe in dem die gui-elemnte "deffiniert" werden.
meinst du jetzt also es ist besser sowas in einem neuen modul unterzubringen also z.b. dort eine neue klasse definieren und den generierten code einfach zu importieren, habe das richtig verstanden?
BlackJack

In dem generierten Code steht am Anfang dieser Kommentar:

Code: Alles auswählen

# WARNING! All changes made in this file will be lost!
Da bietet es sich doch eher *nicht* an Änderungen an der Datei vorzunehmen.

Nochmal: Das ist generierter Code für den Compiler. Der ist nicht dafür gedacht von Menschen gut gelesen werden zu können. Und wie man mit diesen Dateien umgehen sollte steht in der PyQt-Dokumentation mit Beispielen wie man das in eigene Programme einbinden sollte.

Und ebenfalls noch mal: Lass das mit dem generieren von Code sein und verwende das `uic`-Modul zum direkten laden der *.ui-Datei zur Laufzeit. Das spart den Zwischenschritt mit der generierten Quelltextdatei.
Duall777
User
Beiträge: 7
Registriert: Freitag 20. Februar 2015, 13:47

Ok alles klar dann werde ich es mit dem Modul ausprobieren.

Danke euch für die Erklärung :D

Vile Grüße

Duall777
Antworten