Hallo noch mal Allerseits,
habe mir zum üben einen anderen Code geschrieben und habe immer noch Probleme von einer Klasse auf die andere zuzugreifen. Ich habe versucht so gut es ging die Tipps von
__blackjack__ umzusetzen, und hoffe das es lesbar ist.
Zum Code:
Das Programm soll einfach die Stromkosten berechnen, in dem erst unter Einstellungen(Sub Fenster) die Ganzen Beträge wie Grundgebühr, kosten pro KWh usw. einträgt, wenn man damit Fertig ist klickt man auf Speichern, dann werden die Daten gespeichert(habe noch nicht im Code, aber ist erst mal nicht so wichtig) und das Fenster schliesst sich.
Dann trägt man für jeden Monat den Zählerstand ein und klickt auf Berechnen. Dabei müssen die unter Einstellungen eingetragenen Daten dem entsprechend berechnet werden. In der
calculate.py habe ich dazu was geschrieben.
Natürlich muss das ganze auch gespeichert werden und im nächsten Monat, wenn man das Programm aufmacht, sollen die Daten im Programm stehen.
Kann mir vielleicht jemand helfen den Code fertigzustellen? Mir geht es hauptsächlich darum, zu verstehen wie man von einer Klasse auf die Objekte der anderen Klasse zugreift und Text/Wert ausliest, oder die Objekte selbst ändert z.B. Die Farbe der Schrift oder ähnliches.
Und Hier der Code: (diesmal habe ich versucht alles zu trennen, deswegen sind es drei Dateien)
StromBerechnung.py
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication
import MainWindow
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow.MainWindow()
window.show()
sys.exit(app.exec_())
MainWindow.py
Code: Alles auswählen
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QGroupBox, QHBoxLayout, QLabel, QLineEdit,QPushButton,
QVBoxLayout, QMainWindow, QWidget)
from settings import Settings
class MainWindow(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self)
## Set Window Properties
self.setWindowTitle("Stromkosten Berechnung")
self.setMinimumWidth(300)
self.setMinimumHeight(450)
self.settingsDialog = Settings(self)
self.create_month_box()
self.create_buttons_box()
self.create_result_box()
mainLayout = QVBoxLayout()
mainLayout.addWidget(self.month_groupBox)
mainLayout.addStretch(1)
mainLayout.addWidget(self.result_groupbox)
mainLayout.addWidget(self.buttons_groupbox)
# QWidget-------------------------------------------------------------------------------------------------------
mainwidget = QWidget(self)
self.setCentralWidget(mainwidget)
mainwidget.setLayout(mainLayout)
def create_month_box(self):
months = ["Januar", "Februar", "März", "April", "Mai", "Juni",
"Juli", "August", "September", "Oktober", "November", "Dezember"]
mask = "999999,99 KW\h"
self.month_groupBox = QGroupBox("Zählerstand eintragen")
vbox = QVBoxLayout()
for month in months:
hbox = QHBoxLayout()
month_lbl = QLabel(month)
month_lbl.setFixedWidth(70)
month_lbl.setAlignment(Qt.AlignRight)
consumption_lbl = QLineEdit()
consumption_lbl.setInputMask(mask)
consumption_lbl.setObjectName(month[0:3])
consumption_lbl.setFixedWidth(110)
costs_lbl = QLabel("0")
costs_lbl.setAlignment(Qt.AlignRight)
currency_lbl = QLabel("€")
hbox.addWidget(month_lbl)
hbox.addWidget(consumption_lbl)
hbox.addStretch(1)
hbox.addWidget(costs_lbl)
hbox.addWidget(currency_lbl)
vbox.addLayout(hbox)
self.month_groupBox.setLayout(vbox)
def create_result_box(self):
self.result_groupbox = QGroupBox()
hbox1 = QHBoxLayout()
hbox2 = QHBoxLayout()
hbox3 = QHBoxLayout()
vbox = QVBoxLayout()
calculated_lbl = QLabel("Berechnete Kosten:")
calculated_result_lbl = QLabel("0")
hbox1.addWidget(calculated_lbl)
hbox1.addWidget(calculated_result_lbl)
paid_lbl = QLabel("Bereits gezahlt:")
paid_result_lbl = QLabel("0")
hbox2.addWidget(paid_lbl)
hbox2.addWidget(paid_result_lbl)
difference_lbl = QLabel("Differenz:")
difference_result_lbl = QLabel("0")
hbox3.addWidget(difference_lbl)
hbox3.addWidget(difference_result_lbl)
vbox.addLayout(hbox1)
vbox.addLayout(hbox2)
vbox.addLayout(hbox3)
self.result_groupbox.setLayout(vbox)
def create_buttons_box(self):
self.buttons_groupbox = QGroupBox()
hbox = QHBoxLayout()
quit_btn = QPushButton("Schließen")
quit_btn.clicked.connect(self.quit_clicked)
calc_btn = QPushButton("Berechnen")
calc_btn.clicked.connect(self.calc_clicked)
settings_btn = QPushButton("Einstellungen")
settings_btn.clicked.connect(self.settings_clicked)
hbox.addWidget(quit_btn)
hbox.addWidget(calc_btn)
hbox.addWidget(settings_btn)
self.buttons_groupbox.setLayout(hbox)
def quit_clicked(self):
print("Exit")
sys.exit()
def settings_clicked(self):
print("Einstellungen")
self.settingsDialog.show()
def calc_clicked(self):
print("Calculate")
pass
settings.py
Code: Alles auswählen
# -*- coding: utf-8 -*-
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QGroupBox, QHBoxLayout, QLabel, QLineEdit,QPushButton,
QVBoxLayout, QMainWindow, QWidget)
class Settings(QMainWindow):
def __init__(self, parent=None):
super(Settings, self).__init__(parent)
## Set Window Properties
self.setWindowTitle("Einstellungen")
self.setMinimumWidth(300)
self.setMinimumHeight(400)
self.create_input_box()
self.create_butons_box()
mainLayout = QVBoxLayout()
mainLayout.addWidget(self.groupbox)
mainLayout.addWidget(self.button_box)
mainwidget = QWidget(self)
self.setCentralWidget(mainwidget)
mainwidget.setLayout(mainLayout)
def create_input_box(self):
labels = ["Grundgebühr", "Kosten pro KWh", "Bonusrückzahlungen", "Monatlicher Abschlag"]
vbox = QVBoxLayout()
self.groupbox = QGroupBox("Daten eintragen")
for label in labels:
hbox = QHBoxLayout()
basic_charge_lbl = QLabel(label)
basic_charge_lbl.setAlignment(Qt.AlignRight)
basic_charge_lbl.setFixedWidth(140)
if "KWh" in label:
basic_charge_lineEdit = QLineEdit()
basic_charge_lineEdit.setInputMask("99,9999")
basic_charge_lineEdit.setFixedWidth(60)
basic_charge_lineEdit.setObjectName(label[0:3])
currency_lbl = QLabel("ct")
else:
basic_charge_lineEdit = QLineEdit()
basic_charge_lineEdit.setInputMask("999,99")
basic_charge_lineEdit.setFixedWidth(60)
basic_charge_lineEdit.setObjectName(label[0:3])
currency_lbl = QLabel("€")
hbox.addWidget(basic_charge_lbl)
hbox.addWidget(basic_charge_lineEdit)
hbox.addWidget(currency_lbl)
vbox.addLayout(hbox)
vbox.addStretch(1)
self.groupbox.setLayout(vbox)
def create_butons_box(self):
self.button_box = QGroupBox()
hbox = QHBoxLayout()
save_btn = QPushButton("Speichern")
save_btn.clicked.connect(self.save_clicked)
hbox.addWidget(save_btn)
self.button_box.setLayout(hbox)
def save_clicked(self):
self.hide()
calculate.py
Code: Alles auswählen
# -*- coding: utf-8 -*-
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QGroupBox, QHBoxLayout, QLabel, QLineEdit,QPushButton,
QVBoxLayout, QMainWindow, QWidget)
class Settings(QMainWindow):
def __init__(self, parent=None):
super(Settings, self).__init__(parent)
## Set Window Properties
self.setWindowTitle("Einstellungen")
self.setMinimumWidth(300)
self.setMinimumHeight(400)
self.create_input_box()
self.create_butons_box()
mainLayout = QVBoxLayout()
mainLayout.addWidget(self.groupbox)
mainLayout.addWidget(self.button_box)
mainwidget = QWidget(self)
self.setCentralWidget(mainwidget)
mainwidget.setLayout(mainLayout)
def create_input_box(self):
labels = ["Grundgebühr", "Kosten pro KWh", "Bonusrückzahlungen", "Monatlicher Abschlag"]
vbox = QVBoxLayout()
self.groupbox = QGroupBox("Daten eintragen")
for label in labels:
hbox = QHBoxLayout()
basic_charge_lbl = QLabel(label)
basic_charge_lbl.setAlignment(Qt.AlignRight)
basic_charge_lbl.setFixedWidth(140)
if "KWh" in label:
basic_charge_lineEdit = QLineEdit()
basic_charge_lineEdit.setInputMask("99,9999")
basic_charge_lineEdit.setFixedWidth(60)
basic_charge_lineEdit.setObjectName(label[0:3])
currency_lbl = QLabel("ct")
else:
basic_charge_lineEdit = QLineEdit()
basic_charge_lineEdit.setInputMask("999,99")
basic_charge_lineEdit.setFixedWidth(60)
basic_charge_lineEdit.setObjectName(label[0:3])
currency_lbl = QLabel("€")
hbox.addWidget(basic_charge_lbl)
hbox.addWidget(basic_charge_lineEdit)
hbox.addWidget(currency_lbl)
vbox.addLayout(hbox)
vbox.addStretch(1)
self.groupbox.setLayout(vbox)
def create_butons_box(self):
self.button_box = QGroupBox()
hbox = QHBoxLayout()
save_btn = QPushButton("Speichern")
save_btn.clicked.connect(self.save_clicked)
hbox.addWidget(save_btn)
self.button_box.setLayout(hbox)
def save_clicked(self):
self.hide()
Ich hoffe ihr könnt mir helfen.
Vielen Dank im voraus.