Внести переменные в приложение Python lib PyQt5

Рейтинг: 1Ответов: 1Опубликовано: 18.05.2023

Готовлю приложение с использованием библиотеки PyQt5, код приведен ниже.

Вопрос вот в чем, как дополнить код, чтобы пользователь в диалоговое окно мог внести данные, которые можно использовать для расчета?

import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtCore import QSize    

class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(300, 200))    
        self.setWindowTitle("PyQt button example - pythonprogramminglanguage.com") 

        pybutton = QPushButton('Click me', self)
        pybutton.clicked.connect(self.clickMethod)
        pybutton.resize(100,32)
        pybutton.move(50, 50)  

    def calc():
        return 10 + 20      # Данные которые вводятся пользователем

    def clickMethod(self):
        print('Clicked Pyqt button.')
        calc()  

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit( app.exec_() )

Ответы

▲ 0Принят

Как вариант:

import sys
from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, \
    QWidget, QPushButton, QDialog, QLineEdit, QVBoxLayout, \
    QFormLayout, QMessageBox, QApplication
from PyQt5.QtCore import QSize   
 
 
class Dialog(QDialog):
    def __init__(self, parent):
        super(Dialog, self).__init__()
        self.parent = parent
        
        self.x = QLineEdit(self)
        self.y = QLineEdit(self)
        self.button = QPushButton('Выполнить расчет.', self)
        self.button.clicked.connect(self.onClicked)

        layout = QFormLayout(self)
        layout.addRow("x:", self.x)
        layout.addRow(QLabel("y:"), self.y)
        layout.addRow('', self.button)
        
    def onClicked(self):
        if self.x.text() and self.x.text():
            try:
                x = float(self.x.text())
                y = float(self.y.text())
            except:
                QMessageBox.information(
                    self, 
                    'Information', 
                    'Некорректно введены данные. Повторите ввод данных.')
                return
                
            self.parent.label.setText(f'{x} + {y} = {x + y:.3f}')
            
            self.close()
        else:
            QMessageBox.information(
                self, 
                'Information', 
                'Нет данных для расчета.')


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)

        self.date = None
        
        self.label = QLabel()
        
        pybutton = QPushButton('Click me', self)
        pybutton.clicked.connect(self.clickMethod)
        
        self.dialog = Dialog(self)
        
        layout = QVBoxLayout(self.centralWidget)
        layout.addWidget(self.label)
        layout.addWidget(pybutton)

    def calc(self):
        self.dialog.exec_()
#        return 10 + 20                 # Данные которые вводятся пользователем

    def clickMethod(self):
        self.date = self.calc()
       

if __name__ == "__main__":
    app = QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.resize(300, 200)
    mainWin.setWindowTitle("Htllo PyQt")
    mainWin.show()
    sys.exit(app.exec_())

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