首页 > 解决方案 > PyQt5,将变量列表传递给另一个类

问题描述

该程序有 2 个窗口,一个是主窗口,另一个是结果窗口。我想将在 getValue() 函数中获得值的数据传递给另一个类,即结果窗口。

#### THIS PARAMETERS SHOULD PASS TO THE BILLETCALCULATIONRESULTS WINDOW TO CALCULATE ###
    def GetValues(self):
        self.Diameter = float(self.DiameterQline.text())
        self.Height = float(self.HeightQline.text())
        self.StartTemp = float(self.StartTempQline.text())
        self.FinalTemp = float(self.FinalTempQline.text())
        self.HeatingTime = float(self.HeatingTimeQline.text())

我想在另一个窗口中进行计算并将结果打印到屏幕上。像

class BilletCalculationResults(QWidget):
    def calc():
      return str(Main.diameter  * 2 )



def billetCalculationPageDesign(self):
      ### BILLET RESULTS OF CALCULATION PAGE DESIGN ###
      self.billetCalSurfaceAreaLabel = QLabel("Surface Area : ")
      self.billetCalSurfaceAreaLabel.setStyleSheet('font-size: 12pt; font-family: arial,sans-serif')
      str = self.calc()
      self.billetCalSurfaceAreaLabelResult = QLabel(str)

您可以在下面找到所有代码。谢谢

from PyQt5.QtWidgets import *
from PyQt5 import QtCore
import sys
import math
from PyQt5.QtGui import QPixmap,QFont
import sqlite3




class Main(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Calculation")
        self.setGeometry(450,100,1250,600)
        self.UI()
        self.show()
    def UI(self):
        self.mainDesign()
        self.layouts()

    def mainDesign(self):
        self.setStyleSheet('background-color:white')
        #CUSTOMER INFORMATION BUTTONS AND TEXT###
        #### CALCULATE BUTTONS###
        self.buttonCalcBillet = QPushButton("Calculate")
        self.buttonCalcBillet.setStyleSheet(
            'background-color: orange;'
            'color: black;'
        )
        ### CALCULATE BUTTONS CLICKED ###
        self.buttonCalcBillet.clicked.connect(self.billetCalculationResults)
        ######
        self.Title = QLabel("Some Maths")
        self.Title.setAlignment(QtCore.Qt.AlignHCenter)
        self.Title.setStyleSheet('font-size: 18pt; font-family: arial,sans-serif')

        self.DiameterLabel = QLabel("Diameter")
        self.DiameterLabel.setStyleSheet('font-size: 12pt; font-family: arial,sans-serif')
        self.DiameterQline = QLineEdit()
        self.DiameterQline.setPlaceholderText("Please Enter Diameter in mm")
        self.DiameterQline.setStyleSheet(
            'font-family:Hack,monospace;'
            'font:12px;'
            'mind-width:20em;'
        )
        self.HeightLabel = QLabel("Height")
        self.HeightLabel.setStyleSheet('font-size: 12pt; font-family: arial,sans-serif')
        self.HeightQline = QLineEdit()
        self.HeightQline.setPlaceholderText("Please Enter Height in mm")
        self.StartTempLabel = QLabel("Start Temperature")
        self.StartTempLabel.setStyleSheet('font-size: 12pt; font-family: arial,sans-serif')
        self.StartTempQline = QLineEdit()
        self.StartTempQline.setPlaceholderText("Please Enter Start Temperature in Celsius")
        self.FinalTempLabel = QLabel("Final Temperature")
        self.FinalTempLabel.setStyleSheet('font-size: 12pt; font-family: arial,sans-serif')
        self.FinalTempQline = QLineEdit()
        self.FinalTempQline.setPlaceholderText("Please Enter Final Temperature in Celsius")
        self.HeatingTimeLabel = QLabel("Heating Time")
        self.HeatingTimeLabel.setStyleSheet('font-size: 12pt; font-family: arial,sans-serif')
        self.HeatingTimeQline = QLineEdit()
        self.HeatingTimeQline.setPlaceholderText("Please Enter Heating Time in Secs")





    def layouts(self):
        #####LAYOUTS#########
        self.mainLayout = QHBoxLayout()
        self.billetLayout = QFormLayout()
        self.slabLayout = QFormLayout()
        self.hollowLayout = QFormLayout()

        ###ADDING CHILD LAYOUTS TO MAIN LAYOUTS######
        self.mainLayout.addLayout(self.billetLayout,350)
        self.mainLayout.addLayout(self.slabLayout,350)
        self.mainLayout.addLayout(self.hollowLayout,350)
        ###CALCULATION BUTTON WIDGETS###


        self.billetLayout.addRow(self.Title)
        self.billetLayout.addRow(self.DiameterLabel, self.DiameterQline)
        self.billetLayout.addRow(self.HeightLabel, self.HeightQline)
        self.billetLayout.addRow(self.StartTempLabel, self.StartTempQline)
        self.billetLayout.addRow(self.FinalTempLabel, self.FinalTempQline)
        self.billetLayout.addRow(self.HeatingTimeLabel, self.HeatingTimeQline)
        self.billetLayout.addRow(self.buttonCalcBillet)


        ###ADDING WIDGETS TO CUSTOMER INFORMATION###



        ####SETTING MAIN LAYOUT###
        self.setLayout(self.mainLayout)


    def billetCalculationResults(self):
        self.billetCalculation = BilletCalculationResults()
        self.GetValues()
        self.close()


    def GetValues(self):

        self.Diameter = float(self.DiameterQline.text())
        self.Height = float(self.HeightQline.text())
        self.StartTemp = float(self.StartTempQline.text())
        self.FinalTemp = float(self.FinalTempQline.text())
        self.HeatingTime = float(self.HeatingTimeQline.text())




class BilletCalculationResults(QWidget):
      def __init__(self):
          super().__init__()
          self.setWindowTitle("Calculation Results")
          self.setGeometry(450,150,350,600)
          ####CONSTRUCTION OF THE FIRST BILLET CLASS ###
          self.UI()
          self.show()
      def UI(self):
          self.billetCalculationPageDesign()
          self.billetCalculationLayouts()
      def billetCalculationPageDesign(self):
          ### BILLET RESULTS OF CALCULATION PAGE DESIGN ###
          self.billetCalSurfaceAreaLabel = QLabel("Surface Area : ")
          self.billetCalSurfaceAreaLabel.setStyleSheet('font-size: 12pt; font-family: arial,sans-serif')
          str = "a"
          self.billetCalSurfaceAreaLabelResult = QLabel(str)
          self.billetCalSurfaceAreaLabelResult.setStyleSheet('font-size: 12pt; font-family: arial,sans-serif')
          ####VOLUME####
          self.billetCalVolumeLabel = QLabel("Volume : ")
          self.billetCalVolumeLabel.setStyleSheet('font-size: 12pt; font-family: arial,sans-serif')
          self.billetCalVolumeLabelResult = QLabel("")
          self.billetCalVolumeLabelResult.setStyleSheet('font-size: 12pt; font-family: arial,sans-serif')

      def billetCalculationLayouts(self):
          ## BILLET RESULTS OF CALCULATION PAGE DESIGN ###
          self.billetMainLayout = QFormLayout()
          self.billetMainLayout.addRow(self.billetCalSurfaceAreaLabel,self.billetCalSurfaceAreaLabelResult)
          self.billetMainLayout.addRow(self.billetCalVolumeLabel,self.billetCalVolumeLabelResult)
          self.setLayout(self.billetMainLayout)







def main():
    APP = QApplication(sys.argv)
    window = Main()
    sys.exit(APP.exec())
if __name__== '__main__':
    main()

标签: pythonpyqtpyqt5

解决方案


您几乎拥有它,只需获取值EDIT(1)并将它们添加到您的第二个窗口类的构造函数中EDIT(2)。您也可以将它们保存到变量中,但作为示例,我将值打印到命令行Edit(3)

...

    def billetCalculationResults(self):

        self.GetValues()                                                    # EDIT(1) by Shraft      
        self.billetCalculation = BilletCalculationResults(self.Diameter,    # EDIT
                self.Height,self.StartTemp,self.FinalTemp,self.HeatingTime) # EDIT
        self.close()                                                        # EDIT


    def GetValues(self):

        self.Diameter = float(self.DiameterQline.text())
        self.Height = float(self.HeightQline.text())
        self.StartTemp = float(self.StartTempQline.text())
        self.FinalTemp = float(self.FinalTempQline.text())
        self.HeatingTime = float(self.HeatingTimeQline.text())


class BilletCalculationResults(QWidget):
      def __init__(self, diameter, height, startTemp, finalTemp, heatingTime):      # EDIT(2) by Shraft  
          super().__init__()

          print(diameter)               # EDIT(3) by Shraft  
          print(height)                 # EDIT
          print(startTemp)              # EDIT
          print(finalTemp)              # EDIT
          print(heatingTime)            # EDIT

          self.setWindowTitle("Calculation Results")
          self.setGeometry(450,150,350,600)
          ####CONSTRUCTION OF THE FIRST BILLET CLASS ###
          self.UI()
          self.show()

...

希望对你有帮助,有更多麻烦告诉我。


推荐阅读