本实例演示如何使用标准输入框,Qt提供了一个QInputDialog类,QInputDialog类提供了一种简单方面的对话框来获得用户的单个输入信息,目前提供了4种数据类型的输入,可以是一个字符串,一个Int类型数据,一个double类型数据或是一个下拉列表框的条目。其中包括一个提示标签,一个输入控件。若是调用字符串输入框,则为一个QLineEdit,若是调用Int类型或double类型,则为一个QSpinBox,若是调用列表条目输入框,则为一个QComboBox,还包括一个确定输入(Ok)按钮和一个取消输入(Cancel)按钮。
本实例的实现效果如下图。
实例中列举了以上4种输入类型,右则的按钮用于弹出标准输入对话框修改各条信息的值。具体实现代码如下所示:
# -*- coding: utf-8 -*- from PyQt4.QtCore import * from PyQt4.QtGui import * import sys QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8")) class InputDlg(QDialog): def __init__(self,parent=None): super(InputDlg,self).__init__(parent) label1=QLabel(self.tr("姓名")) label2=QLabel(self.tr("性别")) label3=QLabel(self.tr("年龄")) label4=QLabel(self.tr("身高")) self.nameLabel=QLabel("TengWei") self.nameLabel.setFrameStyle(QFrame.Panel|QFrame.Sunken) self.sexLabel=QLabel(self.tr("男")) self.sexLabel.setFrameStyle(QFrame.Panel|QFrame.Sunken) self.ageLabel=QLabel("25") self.ageLabel.setFrameStyle(QFrame.Panel|QFrame.Sunken) self.statureLabel=QLabel("168") self.statureLabel.setFrameStyle(QFrame.Panel|QFrame.Sunken) nameButton=QPushButton("...") sexButton=QPushButton("...") ageButton=QPushButton("...") statureButton=QPushButton("...") self.connect(nameButton,SIGNAL("clicked()"),self.slotName) self.connect(sexButton,SIGNAL("clicked()"),self.slotSex) self.connect(ageButton,SIGNAL("clicked()"),self.slotAge) self.connect(statureButton,SIGNAL("clicked()"),self.slotStature) layout=QGridLayout() layout.addWidget(label1,0,0) layout.addWidget(self.nameLabel,0,1) layout.addWidget(nameButton,0,2) layout.addWidget(label2,1,0) layout.addWidget(self.sexLabel,1,1) layout.addWidget(sexButton,1,2) layout.addWidget(label3,2,0) layout.addWidget(self.ageLabel,2,1) layout.addWidget(ageButton,2,2) layout.addWidget(label4,3,0) layout.addWidget(self.statureLabel,3,1) layout.addWidget(statureButton,3,2) self.setLayout(layout) self.setWindowTitle(self.tr("资料收集")) def slotName(self): name,ok=QInputDialog.getText(self,self.tr("用户名"), self.tr("请输入新的名字:"), QLineEdit.Normal,self.nameLabel.text()) if ok and (not name.isEmpty()): self.nameLabel.setText(name) def slotSex(self): list=QStringList() list.append(self.tr("男")) list.append(self.tr("女")) sex,ok=QInputDialog.getItem(self,self.tr("性别"),self.tr("请选择性别"),list) if ok: self.sexLabel.setText(sex) def slotAge(self): age,ok=QInputDialog.getInteger(self,self.tr("年龄"), self.tr("请输入年龄:"), int(self.ageLabel.text()),0,150) if ok: self.ageLabel.setText(str(age)) def slotStature(self): stature,ok=QInputDialog.getDouble(self,self.tr("身高"), self.tr("请输入身高:"), float(self.statureLabel.text()),0,2300.00) if ok: self.statureLabel.setText(str(stature)) app=QApplication(sys.argv) form=InputDlg() form.show() app.exec_()
构造函数中声明了对话框中用到的控件以及各按钮触发的槽函数。
单击姓名后的修改按钮触发slotName()函数,弹出标准字符串输入对话框,如下图。
调用QInputDialog的getText()函数弹出标准字符串输入对话框,getText()函数原型如下:
(QString, bool ok) QInputDialog.getText (QWidget, QString, QString, QLineEdit.EchoMode mode = QLineEdit.Normal, QString text = QString(), Qt.WindowFlags flags = 0)
此函数的第一个参数为标准输入对话框的父窗口,第二个参数为标准输入对话框的标题名,第三个参数为标准输入对话框的标签提示,第四个参数mode指定标准输入对话框中QLineEdit控件的输入模式,第五个参数text为标准字符串输入对话框弹出时QLineEdit控件默认出现的文字,最后一个参数指明标准输入对话框的窗体标识。
slotName()函数中的第3行判断ok的值,若用户单击了“OK”按钮,则把新输入的姓名更新至显示标签。
单击性别后的修改按钮触发slotSex()函数,弹出标准条目选择对话框,如下图。
第1,2,3行创建一个QStringList对象,包括两个QString项,用于标准输入对话框中下拉列表框的条目显示。
第4行调用QInputDialog的getItem()函数弹出标准条目选择对话框,getItem()函数原型如下:
(QString, bool ok) getItem (QWidget, QString, QString, QStringList, int current = 0, bool editable = True, Qt.WindowFlags flags = 0)
此函数的第一个参数为标准输入对话框的父窗窗口,第二个参数为标准输入对话框的标题名,第三个参数为标准输入对话框的标签提示,第四个参数指定标准输入对话框中QComboBox控件显示的可选条目,为一个QStringList对象,第五个参数current为标准条目选择对话框弹出时QComboBox控件中默认显示的条目序号,第六个参数editable指定QComboBox控件中显示的文字是否可编辑,最后一个参数指明标准输入对话框的窗体标识。
第6行判断ok的值,若用户单击了“OK”按钮,则把新输入的性别更新至显示标签。
单击年龄后的修改按钮触发slotAge()函数,弹出标准int类型输入对话框,如下图。
调用QInputDialog的getInteger()函数弹出标准int类型输入对话框,getInteger()函数原型如下:
(int, bool ok) getInteger (QWidget, QString, QString, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, Qt.WindowFlags flags = 0)
此函数的第一个参数为标准输入对话框的父窗窗口,第二个参数为标准输入对话框的标题名,第三个参数为标准输入对话框的标签提示,第四个参数value指定标准输入对话框中QSpinBox控件默认显示值,第五六个参数指定QSpinBox控件的数值范围,第七个参数step指定QSpinBox控件的步进值。
第4行判断ok的值,若用户单击了“OK”按钮,则把新输入的年龄值更新至显示标签。
单击身高后的修改按钮触发slotStature()函数,弹出标准double类型输入对话框,如下图。
调用QInputDialog的getDouble函数弹出标准double类型输入对话框,getDouble()函数原型如下:
(float, bool ok) getDouble (QWidget, QString, QString, float value = 0, float min = -2147483647, float max = 2147483647, int decimals = 1, Qt.WindowFlags flags = 0)
此函数的第一个参数为标准输入对话框的父窗窗口,第二个参数为标准输入对话框的标题名,第三个参数为标准输入对话框的标签提示,第四个参数value指定标准输入对话框中QSpinBox控件默认显示值,第五六个参数指定QSpinBox控件的数值范围,第七个参数decimals 指定QSpinBox控件的步进值。
第4行判断ok的值,若用户单击了“OK”按钮,则把新输入的身高值更新至显示标签。