Code zeigt nichts an

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Hallo, laut Buch sollte folgender Code funktionieren:

Code: Alles auswählen

# -*- coding: utf-8 -*-
"""
Created on Mon Mar 21 09:25:36 2016

@author: rk480158
"""
import sys
from PyQt4 import QtCore, QtGui

def main(argv):
    print("Hallo")
    app = QtGui.QApplication(argv)
#    mainwindow = QtGui.QMainWindow()
    mainwindow=MainWindow()
    mainwindow.show()
    sys.exit(app.exec_())
    main(sys.argv)
    
class MainWindow(QtGui.QMainWindow):
    
    def _init_(self, *args):
        QtGui.QMainWindow._init_(self, *args)
        self.createMenu()
        self.createComponents()
        self.createLayout()
        self.createConnects()
        
        self.setWindowTitle(self.tr(u"Hello World!"))
        
    def createMenu(self):
        pass
    
    def createComponents(self):
        self.labelHalloWelt = QtGui.QLabel(self.tr(u"Hello World"))
        self.buttonTextAktualisieren = QtGui.QPushButton(self.tr(u"Update!"))
        self.editText = QtGui.QLineEdit()
        
    def createConnects(self):
        pass
    
    def createLayout(self):
        layoutZentral = QtGui.QVBoxLayout()
        layoutZentral.addWidget(self.labelHelloWelt)
        layoutZentral.addWidget(self.editText)
        layoutZentral.addWidget(self.buttonTextAktualisieren)
        
        widgetZentral = QtGui.QWidget()
        widgetZentral.setLayout(layoutZentral)
        self.setCentralWidget(widgetZentral)
Er zeigt aber nichts an. Kann mir jemand weiterhelfen?
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Es muss

Code: Alles auswählen

__init__
heißen, nicht

Code: Alles auswählen

_init_
In specifications, Murphy's Law supersedes Ohm's.
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Habe ich geändert, es kommt aber immer noch nichts als Ausgabe. Selbst print("Hallo") wird nicht ausgeführt.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@Brando: Du rufst auch main nirgends auf (Das rekursive Aufrufen von main innerhalb von main ist wohl nicht beabsichtigt).
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

OK ich habe eine Zeile main() ergänzt und das Programm läuft immer noch nicht.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@Brando: jetzt wäre es an der Zeit, dass Du zeigst, was Du eigentlich gemacht hast.
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Folgenden Code habe ich neu erstellt:

Code: Alles auswählen

# -*- coding: utf-8 -*-
"""
Created on Mon Mar 21 09:25:36 2016

@author: rk480158
"""
import sys
from PyQt4 import QtCore, QtGui

# def main(argv):

#    main(sys.argv)
    
class MainWindow(QtGui.QMainWindow):
    
    def __init__(self, *args):
#        super(Window,self).__init__()        
        QtGui.QMainWindow.__init__(self, *args)
        self.createMenu()
        self.createComponents()
        self.createLayout()
        self.createConnects()
        
        self.setWindowTitle(self.tr(u"Hello World!"))
        
    def createMenu(self):
        pass
    
    def createComponents(self):
        self.labelHalloWelt = QtGui.QLabel(self.tr(u"Hello World"))
        self.buttonTextAktualisieren = QtGui.QPushButton(self.tr(u"Update!"))
        self.editText = QtGui.QLineEdit()
        
    def createConnects(self):
        pass
    
    def createLayout(self):
        layoutZentral = QtGui.QVBoxLayout()
        layoutZentral.addWidget(self.labelHelloWelt)
        layoutZentral.addWidget(self.editText)
        layoutZentral.addWidget(self.buttonTextAktualisieren)
        
        widgetZentral = QtGui.QWidget()
        widgetZentral.setLayout(layoutZentral)
        self.setCentralWidget(widgetZentral)

print("Hallo")
app = QtGui.QApplication(sys.argv)
#    mainwindow = QtGui.QMainWindow()
mainwindow = MainWindow()
mainwindow.show()
sys.exit(app.exec_())
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@Brando: ... und was heißt jetzt, "läuft nicht"? Gibt es vielleicht eine Fehlermeldung, und wenn ja welche?
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Das ist ja gerade das beunruhigende; es gibt keine Fehlermeldung. Aber es tut sich auch nichts. Keine GUI Elemente, die dargestellt werden.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie startest Du das Programm? Bei mir gibt es eine Fehlermeldung.
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Ich habe im Code den Label self.labelHalloWelt = QtGui.QLabel(self.tr(u"Hello World")) konsistent gesetzt, mit: layoutZentral.addWidget(self.labelHalloWelt)

Im übrigen programmiere ich mit Spyder; ein einfaches F5 und die Datei wird ausgeführt. Allerdings gibt es kein Ergebnis, ich muss aber den kernel reloaden.
bb1898
User
Beiträge: 200
Registriert: Mittwoch 12. Juli 2006, 14:28

Brando hat geschrieben:Ich habe im Code den Label self.labelHalloWelt = QtGui.QLabel(self.tr(u"Hello World")) konsistent gesetzt, mit: layoutZentral.addWidget(self.labelHalloWelt)
Das ist merkwürdig. Mit genau dieser kleinen Korrektur ist das Programm bei mir nämlich gelaufen (Python 3.4, PyQt 4.11, Windows 10).
Im übrigen programmiere ich mit Spyder; ein einfaches F5 und die Datei wird ausgeführt. Allerdings gibt es kein Ergebnis, ich muss aber den kernel reloaden.
Ich kenne mich mit Spyder nicht aus; aber nicht jede IDE verträgt sich mit jeder GUI-Bibliothek. Hast Du das Programm mal direkt aus einem Terminal (auf Windows: Eingabeaufforderung) gestartet? Das ist die sicherste Methode, Fehlermeldungen gezeigt zu kriegen. Mit IDLE sollte es auch gehen (tut es jedenfalls bei mir) - IDLE und tkinter geht nicht gut, IDLE und PyQt verträgt sich schon.
Antworten