Anfangsprobleme

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
doca82
User
Beiträge: 48
Registriert: Mittwoch 16. September 2009, 19:39
Wohnort: Berlin

Hallo Leute,
bin gerade dabei mich in pyqt4 reinzufuchsen...und nebenbei auch noch in die Python Grundlagen.
Ich will eine Anwenung progammieren, die über den calendar nach klicken eines buttons das ausgewälte datum zur Weiterverarbeitung herausgibt.

Dazu habe ich gedacht die selectedDate() Methode des Calendars zu nehmen. Sah relativ unproblematisch für mich aus...aber dann diese Fehler bei den Folgenden dateien:
die konvertierte pyqt Datei:

Code: Alles auswählen

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

# Form implementation generated from reading ui file 'rechnungsgen.ui'
#
# Created: Tue Nov 03 20:52:48 2009
#      by: PyQt4 UI code generator 4.5.4
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

class Ui_rechnungsgen(object):
    def setupUi(self, rechnungsgen):
        rechnungsgen.setObjectName("rechnungsgen")
        rechnungsgen.resize(695, 428)
        self.centralwidget = QtGui.QWidget(rechnungsgen)
        self.centralwidget.setObjectName("centralwidget")
        self.calendar = QtGui.QCalendarWidget(self.centralwidget)
        self.calendar.setGeometry(QtCore.QRect(10, 40, 371, 201))
        self.calendar.setMinimumDate(QtCore.QDate(2008, 9, 14))
        self.calendar.setFirstDayOfWeek(QtCore.Qt.Monday)
        self.calendar.setObjectName("calendar")
        self.button_billprint = QtGui.QPushButton(self.centralwidget)
        self.button_billprint.setGeometry(QtCore.QRect(10, 250, 131, 23))
        self.button_billprint.setObjectName("button_billprint")
        self.label_expl = QtGui.QLabel(self.centralwidget)
        self.label_expl.setGeometry(QtCore.QRect(10, 10, 361, 16))
        self.label_expl.setObjectName("label_expl")
        self.button_close = QtGui.QPushButton(self.centralwidget)
        self.button_close.setGeometry(QtCore.QRect(290, 250, 91, 23))
        self.button_close.setObjectName("button_close")
        rechnungsgen.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(rechnungsgen)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 695, 22))
        self.menubar.setObjectName("menubar")
        rechnungsgen.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(rechnungsgen)
        self.statusbar.setObjectName("statusbar")
        rechnungsgen.setStatusBar(self.statusbar)

        self.retranslateUi(rechnungsgen)
        QtCore.QObject.connect(self.button_close, QtCore.SIGNAL("clicked()"), rechnungsgen.close)
        QtCore.QObject.connect(self.button_billprint, QtCore.SIGNAL("clicked()"), self.calendar.showSelectedDate)
        QtCore.QMetaObject.connectSlotsByName(rechnungsgen)

    def retranslateUi(self, rechnungsgen):
        rechnungsgen.setWindowTitle(QtGui.QApplication.translate("rechnungsgen", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
        self.button_billprint.setText(QtGui.QApplication.translate("rechnungsgen", "Rechnungen drucken", None, QtGui.QApplication.UnicodeUTF8))
        self.label_expl.setText(QtGui.QApplication.translate("rechnungsgen", "Bitte Datum waehlen, um zu den Anmeldungen die Rechnungen zu erhalten! ", None, QtGui.QApplication.UnicodeUTF8))
        self.button_close.setText(QtGui.QApplication.translate("rechnungsgen", "Beenden", None, QtGui.QApplication.UnicodeUTF8))

und mein Versuch dazu...

Code: Alles auswählen

import sys
from PyQt4 import QtCore, QtGui
from rechnungsgen import Ui_rechnungsgen

class StartQT4(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_rechnungsgen()
        self.ui.setupUi(self)
        QtCore.QObject.connect(self.button_billprint, QtCore.SIGNAL("clicked()"),self.calendar.showSelectedDate)

    def selectedDate(self):
        print
        
        

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

Traceback (most recent call last):
File "C:\Python26\rechgenstart.py", line 19, in <module>
myapp = StartQT4()
File "C:\Python26\rechgenstart.py", line 10, in __init__
QtCore.QObject.connect(self.button_billprint, QtCore.SIGNAL("clicked()"),self.calendar.showSelectedDate)
AttributeError: 'StartQT4' object has no attribute 'button_billprint'


Vielen Dank für die Mühe für diejenigen, die es sich durchlesen :)

hab ich button_billprint nicht initialisiert?!

Gruß
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ja, hast du nicht. Zumindest nicht fuer `StartQT4`, sondern fuer `self.ui` dh. du musst per `self.ui.attribute` auf deine GUI-Elemente zugreifen.

Alternativ kannst du das UI auch dynamisch laden. Einfach mal im Forum suchen, oder in der PyQt Doku lesen.
doca82
User
Beiträge: 48
Registriert: Mittwoch 16. September 2009, 19:39
Wohnort: Berlin

oh ja, vielen Dank das probier ich gleich ;)
doca82
User
Beiträge: 48
Registriert: Mittwoch 16. September 2009, 19:39
Wohnort: Berlin

bin ziemlich am Ende mit meinem wenigen Latein...

Kannst Du mir sagen wie ich die Attribute ansprechen kann?

Vielen Dank
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hat cofi Dir doch schon gesagt !?!

Davon abgesehen würde ich das ganze auch dynamisch zur Laufzeit laden lassen (also direkt aus der ui-Datei):
http://www.riverbankcomputing.co.uk/sta ... uic-module

Dazu gibts hier auch genügend Beispiele im Forum.
doca82
User
Beiträge: 48
Registriert: Mittwoch 16. September 2009, 19:39
Wohnort: Berlin

hmm vielleicht sollte ich erst mal besser OOP mit Python beherrschen...anstatt mich schon an die Kronjuwelen zu wagen ;)

Ich steh auf dem Schlauch...
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

doca82 hat geschrieben:hmm vielleicht sollte ich erst mal besser OOP mit Python beherrschen...anstatt mich schon an die Kronjuwelen zu wagen ;)
Ja.

Und weil ich so gern selbst-referziell bin:
cofi hat geschrieben:Ja, hast du nicht. Zumindest nicht fuer `StartQT4`, sondern fuer `self.ui` dh. du musst per `self.ui.attribute` auf deine GUI-Elemente zugreifen.
doca82
User
Beiträge: 48
Registriert: Mittwoch 16. September 2009, 19:39
Wohnort: Berlin

ah habs umgesetzt :

Code: Alles auswählen

import sys
from PyQt4 import QtCore, QtGui
from rechnungsgen import Ui_rechnungsgen

class StartQT4(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.StartQT4 = Ui_rechnungsgen()
        self.StartQT4.setupUi(self)
        QtCore.QObject.connect(self.StartQT4.button_billprint, QtCore.SIGNAL("clicked()"),self.StartQT4.calendar.showSelectedDate)

Danke für die Winke mit dem Zaunpfahl
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das ist jetzt aber die denkbar schlechteste Loesung.

Code: Alles auswählen

import sys
from PyQt4 import QtCore, QtGui
from rechnungsgen import Ui_rechnungsgen

class StartQT4(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_rechnungsgen()
        self.ui.setupUi(self)
        QtCore.QObject.connect(self.ui.button_billprint, QtCore.SIGNAL("clicked()"),self.ui.calendar.showSelectedDate)

Antworten