PyQt对话框,控件(实例:利息计算程序)

PyQt对话框,控件(实例:利息计算程序)

    • 作业描述
    • 全解python代码实现
    • 全解代码截图
    • 部分代码过程详解
        • 1.新建对话框
        • 2.放入控件QLabel()
        • 3.网格布局QGridLayout()
        • 4.放入数字框控件QDoubleSpinBox()
        • 5.放入控件QComboBox(下拉框)
        • ==界面完成的整体效果==
        • 6.链接信号和槽
        • 7.定义槽

作业描述

实现如下图所示的利息计算程序
复利
PyQt对话框,控件(实例:利息计算程序)_第1张图片

全解python代码实现

import sys
import PyQt5.QtCore as qc 
import PyQt5.QtGui as qg
import PyQt5.QtWidgets  as qw

#新建一个对话框,继承自QDialog
class Form(qw.QDialog):
    #重载构造函数
    def __init__(self,parent = None):
        #重载父类构造函数
        super().__init__(parent)
        #改变窗口显示的title
        self.setWindowTitle("Interest")


        #第一行标签Principal
        self.prinLabel = qw.QLabel("&Principal:")
        #第一行Principal的数字框
        self.prinSpinBox = qw.QDoubleSpinBox(self)
        #前缀
        self.prinSpinBox.setPrefix("$")
        #范围
        self.prinSpinBox.setRange(0.01,1000000)
        #初始值
        self.prinSpinBox.setValue(1000.00)
        #给prinLabel配个合作伙伴prinSpinBox
        self.prinLabel.setBuddy(self.prinSpinBox)
        
        
        #第二行标签Rate
        self.rateLabel = qw.QLabel("&Rate:")
        #第二行Rate的数字框
        self.rateSpinBox = qw.QDoubleSpinBox(self)
        #后缀
        self.rateSpinBox.setSuffix("%")
        #初始值
        self.rateSpinBox.setValue(5.00)
        #给rateLabel配个合作伙伴rateLabel
        self.rateLabel.setBuddy(self.rateLabel)
        
        
        #第三行标签year
        self.yearLabel = qw.QLabel("&Year")
        #第三行下拉框year
        self.yearComboBox = qw.QComboBox(self)
        self.itemdata = ['1 Year','2 Years','3 Years','4 Years','5 Years']
        self.yearComboBox.addItems(self.itemdata)
        
        
        #第四行标签结果
        self.amountLabel = qw.QLabel("&Amount")
        # ***
        self.resultLabel = qw.QLabel("$ 1102.50")
        


        #显示,网格布局
        self.layout = qw.QGridLayout(self)
        
        self.layout.addWidget(self.prinLabel, 0, 0)
        self.layout.addWidget(self.prinSpinBox, 0, 1)
        
        self.layout.addWidget(self.rateLabel, 1, 0)
        self.layout.addWidget(self.rateSpinBox, 1, 1)
        
        self.layout.addWidget(self.yearLabel, 2, 0)
        self.layout.addWidget(self.yearComboBox, 2, 1)
        
        self.layout.addWidget(self.amountLabel, 3, 0)
        self.layout.addWidget(self.resultLabel, 3, 1)
        
        self.setLayout(self.layout)
        
        
        #链接信号与槽
        self.prinSpinBox.valueChanged.connect(self.updateData)
        self.rateSpinBox.valueChanged.connect(self.updateData)
        self.yearComboBox.currentIndexChanged.connect(self.updateData)
        
        
    def updateData(self):
        #获取prinSpinBox中更新的数据
        prin = float(self.prinSpinBox.value())
        #获取rateSpinBox中更新的数据
        rate = float(self.rateSpinBox.value())
        #获取yearComboBox中更新的数据
        year = int(self.yearComboBox.currentIndex())+1
        #计算结果
        result = prin * pow((1+0.01*rate),(year+1))
        #把更新结果显示在resultLabel中
        self.resultLabel.setText("{0:.2f}".format(result))
  
       
app = qw.QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

全解代码截图

PyQt对话框,控件(实例:利息计算程序)_第2张图片
PyQt对话框,控件(实例:利息计算程序)_第3张图片

部分代码过程详解

1.新建对话框

PyQt对话框,控件(实例:利息计算程序)_第4张图片 PyQt对话框,控件(实例:利息计算程序)_第5张图片

2.放入控件QLabel()

在这里插入图片描述

3.网格布局QGridLayout()

这之后虽然label控件已经存在了,但是未显示。
所以:在这里插入图片描述
定义layout对象,使用网格布局(也有垂直布局等等)
再在layout对象里显示self.prinLabel
用addWidget()
(0,0)表示显示在(0,0)位置上
效果:
PyQt对话框,控件(实例:利息计算程序)_第6张图片

4.放入数字框控件QDoubleSpinBox()

同理:
在这里插入图片描述
在这里插入图片描述
效果:
PyQt对话框,控件(实例:利息计算程序)_第7张图片
再改变数据框的各种参数,用setXxxx()
在这里插入图片描述
还可以把Label和SpinBox组队:
在这里插入图片描述
效果:
PyQt对话框,控件(实例:利息计算程序)_第8张图片

5.放入控件QComboBox(下拉框)

同理完成其他代码
可用QComboBox()定义下拉框,用addItems()修改下拉选项
在这里插入图片描述

界面完成的整体效果

PyQt对话框,控件(实例:利息计算程序)_第9张图片

6.链接信号和槽

格式:发出对象.信号名.connect(接收对象.槽名)
这里用xxxx.valueChanged.connect(xx)或者xxxx.currentIndexChanged.connect(xx)等等链接信号和槽
在这里插入图片描述

7.定义槽

定义updateData,处理接收到的更新数据并作出反应
PyQt对话框,控件(实例:利息计算程序)_第10张图片
!!!!Interesting!!!!

你可能感兴趣的:(PyQt对话框,控件(实例:利息计算程序))