Как обновить три QLabel данными из одного QLineEdit?

Есть поле label_1_line_edit = QLineEdit(), при вставке данных в него:

  • в первом label_1_label_total = QLabel() число должно увеличиться на 5,
  • во втором label_2_label_total = QLabel() число должно уменьшится на 2,
  • в третьем label_3_label_total = QLabel() число должно увеличиться на 10.

main.py

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QLabel, QGridLayout, QLineEdit)

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        # hour counts
        self.data_5 = 10
        self.label_1 = QLabel()
        self.label_1.setAlignment(Qt.AlignLeft)
        self.label_1.setText('Поле1')
        self.label_1.setStyleSheet(
            "color: #1E5F74; font: 20pt;")
        self.label_1_label_total = QLabel()
        self.label_1_label_total.setAlignment(Qt.AlignLeft)
        self.label_1_label_total.setStyleSheet(
            "color: #1E5F74; font: 20pt;")
        self.label_1_line_edit = QLineEdit()
        self.label_1_line_edit.setPlaceholderText('Введите число')
        self.label_1_line_edit.setMaxLength(2)
        self.label_1_line_edit.textChanged.connect(self.label_count)  # Реагируем на события изменения текста
        layout = QGridLayout()
        self.setLayout(layout)
        layout.addWidget(self.label_1, 0, 0)
        layout.addWidget(self.label_1_label_total, 0, 2)
        layout.addWidget(self.label_1_line_edit, 0, 1)
        # layout.addWidget(self.label_2_label_total, 1, 2)
        # layout.addWidget(self.label_3_label_total, 2, 2)

    def label_count(self, text):
        try:
            self.number = int(text)
            self.label_1_label_total.setNum(self.number + self.data_5)
        except Exception as e:
            return


if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = MyWidget()
    widget.resize(200, 150)
    widget.show()
    sys.exit(app.exec())

Ответы (1 шт):

Автор решения: S. Nick

Я увидел вашу задачу так:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QApplication, QFormLayout, 
    QWidget, QLabel, QGridLayout, QLineEdit)


class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        
        # hour counts
        self.data_5 = 5
        self.data_2 = 2
        self.data_10 = 10

        self.label_1_label_total = QLabel(objectName='label_1',
            alignment=Qt.AlignCenter)
        self.label_2_label_total = QLabel(objectName='label_2',
            alignment=Qt.AlignCenter)
        self.label_3_label_total = QLabel(objectName='label_3',
            alignment=Qt.AlignCenter)
            
        self.label_1_line_edit = QLineEdit()
        self.label_1_line_edit.setPlaceholderText('Введите число')
        self.label_1_line_edit.setMaxLength(2)
        self.label_1_line_edit.textChanged.connect(self.label_count)  

        layout = QFormLayout(self)
        layout.addRow(QLabel("Поле1:"), self.label_1_label_total)
        layout.addRow(QLabel("Поле2:"), self.label_2_label_total)
        layout.addRow(QLabel("Поле3:"), self.label_3_label_total)
        layout.addRow(self.label_1_line_edit)
        
    def label_count(self, text):
        try:
            self.number = int(text)
            self.label_1_label_total.setNum(self.number + self.data_5)
            self.label_2_label_total.setNum(self.number + self.data_2)
            self.label_3_label_total.setNum(self.number + self.data_10)
        except Exception as e:
            return


Stylesheet = '''
QLabel {
    color: #1E5F74; 
    font: 15pt;
}
#label_1, #label_2, #label_3 {
    color: #1E5F74; 
    font: 20pt; 
} 
QLineEdit {
    font: 13pt; 
}               
'''

if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setStyleSheet(Stylesheet) 
    widget = MyWidget()
    widget.resize(200, 150)
    widget.show()
    sys.exit(app.exec())

введите сюда описание изображения


Update:

Во втором QLabel число должно уменьшится на 2 - self.label_2_label_total.setNum(self.number + self.data_2

...

    self.label_2_label_total.setNum(self.number - self.data_2)

...

введите сюда описание изображения

→ Ссылка