PyQt5-数据输入输出
QLineEdit是常用的输入输出字符串的组件,也可以用于输入输出数值数据,只需进行字符串与数字之间的转换。
QSpinBox是专门用于输入输出整数的组件,还可以使用二进制、十六进制显示;
QDoubleSpinBox是专门用于输入输出浮点数的组件。
Demo3_1是采用单窗体应用程序模板widgetApp创建的。在UIDesigner里可视化设计窗体Widget.ui时,两个GroupBox内部的组件采用网格状布局,窗体总体采用垂直布局。窗体上各组件的命名、布局和属性设置详见示例源文件Widget.ui。
在窗体可视化设计时可以设置各个组件的属性。QSpinBox和QDoubleSpinBox都是QAbstractSpinBox的子类,具有大多数相同的属性,区别只是参数类型不同。QSpinBox和QDoubleSpinBox的主要属性如表3-1所示。
在UI Designer的属性编辑器里可设置属性,一个属性一般对应于类的两个接口函数,即一个读取函数和一个设置函数。例如,QDoubleSpinBox的decimals属性,读取属性值的函数为decimals(),返回一个int数值;设置属性值的函数为setDecimals(prec),参数prec是int类型。
设计成这样
双击Demo3_1项目目录下的uic.bat文件,就可以对Widget.ui文件进行编译,生成文件ui_Widget.py。文件ui_Widget.py中的类Ui_Widget是定义了窗体上所有组件和布局的类,这里不再显示其代码内容。
文件myWidget.py里的代码是窗体业务逻辑类QmyWidget的实现代码,其完整代码如下:
import sys
from PyQt5.QtWidgets import QWidget,QApplication
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtGui import QIcon
from ui_QtApp import Ui_Form
class QmyWidget(QWidget):
def __init__(self,parent=None):
super().__init__(parent) #调用父类构造函数
self.ui=Ui_Form() #创建UI对象
self.ui.setupUi(self) #构造UI
## ====由connectSlotsByName()自动与组件的信号关联的槽函数=====
def on_pushButton_3_clicked(self): #计算总价的按钮
num=int(self.ui.lineEdit.text())
price=float(self.ui.lineEdit_2.text())
total=num*price
self.ui.lineEdit_3.setText("%.2f" %total)
## =======自定义槽函数=======
@pyqtSlot(int) #数量 SpinBox
def on_spinBox_valueChanged(self, count):
price=self.ui.doubleSpinBox.value()
self.ui.doubleSpinBox_2.setValue(count * price)
@pyqtSlot(float) #单价 DoubleSpinBox
def on_doubleSpinBox_valueChanged(self, price):
count=self.ui.spinBox.value()
self.ui.doubleSpinBox_2.setValue(count * price)
if __name__ == "__main__": ##用于当前窗体测试
app=QApplication(sys.argv) #创建GUI应用程序
form=QmyWidget() #创建窗体
form.show()
sys.exit(app.exec_())
对于具有overload型参数的信号,只为其中的一种参数形式的信号生成槽函数时,如果不是默认参数类型,应该使用@pyqtSlot修饰符声明参数类型。