PyQt4 精彩实例分析* 实例4 使用标准输入框

本实例演示如何使用标准输入框,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()函数,弹出标准条目选择对话框,如下图。

PyQt4 精彩实例分析* 实例4 使用标准输入框_第1张图片

第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”按钮,则把新输入的身高值更新至显示标签。


你可能感兴趣的:(python,qt,控件,对话框,PyQt)