PYQT程序框架模板

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton, QTabWidget, QLineEdit, QLabel, QMessageBox

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建主窗口和布局
        self.setWindowTitle("Dynamic Tabs with Functions")
        self.setGeometry(100, 100, 400, 300)

        # 创建 QTabWidget
        self.tabs = QTabWidget()
        self.setCentralWidget(self.tabs)

        # 添加初始分页
        self.add_dew_point_to_ppm_tab()
        self.add_subtract_tab()


    def add_dew_point_to_ppm_tab(self):
        tab = QWidget()
        layout = QVBoxLayout()

        # 输入框和按钮
        self.input1 = QLineEdit()
        self.input1.setPlaceholderText("请输入露点温度 (°C)")
        self.input2 = QLineEdit()
        self.input2.setPlaceholderText("请输入总压力 (atm)")
        self.result_label = QLabel("体积分数: ")

        cal_button = QPushButton("计算")
        cal_button.clicked.connect(self.dew_point_to_ppm)

        layout.addWidget(self.input1)
        layout.addWidget(self.input2)
        layout.addWidget(cal_button)
        layout.addWidget(self.result_label)
        tab.setLayout(layout)

        self.tabs.addTab(tab, "露点 -> 体积分数")

    def dew_point_to_ppm(self):
        try:
            # 输入验证
            T_d_Celsius = float(self.input1.text())
            P_total_atm = float(self.input2.text())
            if P_total_atm <= 0:
                raise ValueError("总压力必须大于0")

            # Antoine 方程的常数
            A = 8.07131
            B = 1730.63
            C = 233.426

            # 计算饱和蒸汽压 P_H2O(T_d)
            P_H2O_mmHg = 10 ** (A - (B / (T_d_Celsius + C)))
            P_H2O_atm = P_H2O_mmHg / 760

            # 计算水蒸气浓度(ppm)
            C_H2O_ppm = (P_H2O_atm / P_total_atm) * 1e6
            self.result_label.setText(f"体积分数: {C_H2O_ppm:.2f} ppm")

        except ValueError as e:
            QMessageBox.warning(self, "输入错误", f"请输入有效的数字.\n错误: {str(e)}")

    def add_subtract_tab(self):
        tab = QWidget()
        layout = QVBoxLayout()

        # 输入框和按钮
        self.input3 = QLineEdit()
        self.input3.setPlaceholderText("输入第一个数")
        self.input4 = QLineEdit()
        self.input4.setPlaceholderText("输入第二个数")
        self.result_label_subtract = QLabel("结果:")

        subtract_button = QPushButton("计算减法")
        subtract_button.clicked.connect(self.calculate_subtraction)

        layout.addWidget(self.input3)
        layout.addWidget(self.input4)
        layout.addWidget(subtract_button)
        layout.addWidget(self.result_label_subtract)
        tab.setLayout(layout)

        self.tabs.addTab(tab, "减法计算")

    def calculate_subtraction(self):
        try:
            num1 = float(self.input3.text())
            num2 = float(self.input4.text())
            result = num1 - num2
            self.result_label_subtract.setText(f"结果: {result:.2f}")
        except ValueError:
            QMessageBox.warning(self, "输入错误", "请输入有效的数字.")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec())
Licensed under CC BY-NC-SA 4.0