Reputation: 451
I have one program with 5 QDoubleSpinBox and 1 QLineEdit.
self.total_amount = QtWidgets.QDoubleSpinBox() self.percentage1 = QtWidgets.QDoubleSpinBox() self.amount1 = QtWidgets.QDoubleSpinBox() self.percentage2 = QtWidgets.QDoubleSpinBox() self.amount2 = QtWidgets.QDoubleSpinBox() self.status_line = QtWidgets.QLineEdit()
My required concepts Are:
Edited (1):
from PyQt5 import QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.total_amount = QtWidgets.QDoubleSpinBox()
self.percentage1 = QtWidgets.QDoubleSpinBox()
self.amount1 = QtWidgets.QDoubleSpinBox()
self.percentage2 = QtWidgets.QDoubleSpinBox()
self.amount2 = QtWidgets.QDoubleSpinBox()
self.status_line = QtWidgets.QLineEdit()
form_widget = QtWidgets.QWidget()
form_layout = QtWidgets.QFormLayout(form_widget)
form_layout.addRow("Total Amount", self.total_amount)
form_layout.addRow("percentage 1%", self.percentage1)
form_layout.addRow("Amount 1", self.amount1)
form_layout.addRow("percentage 2%", self.percentage2)
form_layout.addRow("Amount 2", self.amount2)
form_layout.addRow("Status", self.status_line)
form_widget.setFixedSize(form_widget.sizeHint())
central_widget = QtWidgets.QWidget()
self.setCentralWidget(central_widget)
hlay1 = QtWidgets.QHBoxLayout()
hlay1.addWidget(form_widget)
hlay1.addStretch()
vboxlayout = QtWidgets.QVBoxLayout(central_widget)
vboxlayout.addLayout(hlay1)
self.resize(300, 300)
##
self.amount1.setReadOnly(True)
self.amount2.setReadOnly(True)
##
self.percentage1.valueChanged.connect(self.percentage1_changed)
def percentage1_changed(self):
self.amount1.setValue((self.total_amount.value() / 100)* self.percentage1.value())
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Upvotes: 0
Views: 91
Reputation: 604
from PyQt5 import QtWidgets
from PyQt5 import QtCore
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.total_amount = QtWidgets.QDoubleSpinBox()
self.percentage1 = QtWidgets.QDoubleSpinBox()
self.amount1 = QtWidgets.QDoubleSpinBox()
self.percentage2 = QtWidgets.QDoubleSpinBox()
self.amount2 = QtWidgets.QDoubleSpinBox()
self.status_line = QtWidgets.QLineEdit()
form_widget = QtWidgets.QWidget()
form_layout = QtWidgets.QFormLayout(form_widget)
form_layout.addRow("Total Amount", self.total_amount)
form_layout.addRow("percentage 1%", self.percentage1)
form_layout.addRow("Amount 1", self.amount1)
form_layout.addRow("percentage 2%", self.percentage2)
form_layout.addRow("Amount 2", self.amount2)
form_layout.addRow("Status", self.status_line)
form_widget.setFixedSize(form_widget.sizeHint())
central_widget = QtWidgets.QWidget()
self.setCentralWidget(central_widget)
hlay1 = QtWidgets.QHBoxLayout()
hlay1.addWidget(form_widget)
hlay1.addStretch()
vboxlayout = QtWidgets.QVBoxLayout(central_widget)
vboxlayout.addLayout(hlay1)
self.resize(300, 300)
##
self.amount1.setReadOnly(True)
self.amount2.setReadOnly(True)
##########################################################################################
#clear control for disable changed functions
self.clear_control = 0
#set available range for percentage2
self.percentage2.setMaximum(40)
#changed functions
self.percentage1.valueChanged.connect(self.percentage1_changed)
self.percentage2.valueChanged.connect(self.percentage2_changed)
self.status_line.textChanged.connect(self.status_change)
def status_change(self):
self.total_amount.setReadOnly(True)
self.percentage1.setReadOnly(True)
self.percentage2.setReadOnly(True)
def percentage1_changed(self):
#if dont press key escape
if self.clear_control == 0:
self.amount1.setValue((self.total_amount.value() / 100)* self.percentage1.value())
#for set ReadOnly
self.control_percentage()
def percentage2_changed(self):
#if dont press key escape
if self.clear_control == 0:
self.amount2.setValue((self.total_amount.value() / 100)* self.percentage2.value())
#for set ReadOnly
self.control_percentage()
def control_percentage(self):
#percentage1 or percentage2 is changed
if self.percentage1.value() != 0 or self.percentage2.value() != 0:
#and total amount is not zero
if self.total_amount.value() != 0:
self.total_amount.setReadOnly(True)
#key press for success and cancel ==> return-enter key and escape key
def keyPressEvent(self, event):
#return-enter press
if event.key() in [QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter]:
self.status_line.setText("Success :)")
#escape press
if event.key() == QtCore.Qt.Key_Escape:
self.clear_control = 1# disable percentage_change functions for set Zero
self.total_amount.setValue(0)
self.percentage1.setValue(0)
self.amount1.setValue(0)
self.percentage2.setValue(0)
self.amount2.setValue(0)
self.status_line.clear()
#clear setReadOnly
self.total_amount.setReadOnly(False)
self.percentage1.setReadOnly(False)
self.percentage2.setReadOnly(False)
self.clear_control = 0# reenable percentage_change functions
##############################################################################################
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Upvotes: 1