【转】PyQt4 精彩实例分析 实例 4 使用标准输入框

本实例演示如何使用标准输入框,Qt 提供了一个 QInputDialog 类,QInputDialog 类提供了一种简单方
面的对话框来获得用户的单个输入信息,目前提供了 4 种数据类型的输入,可以是一个字符串,一个 Int 类
型数据,一个 double 类型数据或是一个下拉列表框的条目。其中包括一个提示标签,一个输入控件。若是调
用字符串输入框,则为一个 QLineEdit,若是调用 Int 类型或 double 类型,则为一个 QSpinBox,若是调
用列表条目输入框,则为一个 QComboBox,还包括一个确定输入(Ok)按钮和一个取消输入(Cancel)按钮。

本实例的实现效果如下图。

实例中列举了以上 4 种输入类型,右则的按钮用于弹出标准输入对话框修改各条信息的值。具体实现代码如下所示:

  1 #!/usr/bin/python
  2 # -*- coding: utf-8 -*-
  3 
  4 from PyQt4.QtGui import *
  5 from PyQt4.QtCore import *
  6 import sys
  7 
  8 
  9 QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
 10 
 11 class InputDialog(QDialog):
 12 
 13     def __init__(self, parent=None):
 14         super(InputDialog, self).__init__(parent)
 15 
 16         self.setWindowTitle("Data Collection")
 17 
 18         self.label_0 = QLabel(self.tr("Name"))
 19         self.label_1 = QLabel(self.tr("Sex"))
 20         self.label_2 = QLabel(self.tr("Age"))
 21         self.label_3 = QLabel(self.tr("Stature"))
 22 
 23         self.label_name_0 = QLabel("2B")
 24         self.label_name_0.setFrameStyle(QFrame.Panel|QFrame.Sunken)
 25         self.label_sex_0 = QLabel("M")
 26         self.label_sex_0.setFrameStyle(QFrame.Panel|QFrame.Sunken)
 27         self.label_age_0 = QLabel("213")
 28         self.label_age_0.setFrameStyle(QFrame.Panel|QFrame.Sunken)
 29         self.label_stature_0 = QLabel("213")
 30         self.label_stature_0.setFrameStyle(QFrame.Panel|QFrame.Sunken)
 31 
 32         self.btn_name = QPushButton("...")
 33         self.btn_sex = QPushButton("...")
 34         self.btn_age = QPushButton("...")
 35         self.btn_stature = QPushButton("...")
 36 
 37         self.Layout()
 38         self.ConnectSignalSlot()
 39 
 40     def Layout(self):
 41         layout=QGridLayout()
 42         layout.addWidget(self.label_0, 0, 0)
 43         layout.addWidget(self.label_name_0, 0, 1)
 44         layout.addWidget(self.btn_name, 0, 2)
 45         layout.addWidget(self.label_1, 1, 0)
 46         layout.addWidget(self.label_sex_0, 1, 1)
 47         layout.addWidget(self.btn_sex, 1, 2)
 48         layout.addWidget(self.label_2, 2, 0)
 49         layout.addWidget(self.label_age_0, 2, 1)
 50         layout.addWidget(self.btn_age, 2, 2)
 51         layout.addWidget(self.label_3, 3, 0)
 52         layout.addWidget(self.label_stature_0, 3, 1)
 53         layout.addWidget(self.btn_stature, 3, 2)
 54         self.setLayout(layout)
 55 
 56     def ConnectSignalSlot(self):
 57         self.connect(self.btn_name, SIGNAL("clicked()"), self.slotName)
 58         self.connect(self.btn_sex, SIGNAL("clicked()"), self.slotSex)
 59         self.connect(self.btn_age, SIGNAL("clicked()"), self.slotAge)
 60         self.connect(self.btn_stature, SIGNAL("clicked()"), self.slotStature)
 61 
 62     def slotName(self):
 63         name,ok = QInputDialog.getText(self, self.tr("User"),
 64                                        self.tr("Please input new UserName:"),
 65                                        QLineEdit.Normal,
 66                                        self.label_name_0.text())
 67         if ok and (not name.isEmpty()):
 68             self.label_name_0.setText(name)
 69 
 70     def slotSex(self):
 71         list_sex = QStringList()
 72         list_sex.append(self.tr("M"))
 73         list_sex.append(self.tr("F"))
 74         sex,ok = QInputDialog.getItem(self,self.tr("Sex"),
 75                                       self.tr("Please choose sex"),
 76                                       list_sex)
 77         if ok:
 78             self.label_sex_0.setText(sex)
 79 
 80     def slotAge(self):
 81         age,ok = QInputDialog.getInteger(self, 
 82                                          self.tr("Age"),
 83                                          self.tr("Please input age:"),
 84                                          int(self.label_age_0.text()), 0, 150)
 85         if ok:
 86             self.label_age_0.setText(str(age))
 87 
 88     def slotStature(self):
 89         stature,ok = QInputDialog.getDouble(self,
 90                                             self.tr("Stature"),
 91                                             self.tr("Please input stature:"),
 92                                             float(self.label_stature_0.text()), 0, 2300.00)
 93         if ok:
 94             self.label_stature_0.setText(str(stature))
 95 
 96 def main():
 97     app = QApplication(sys.argv)
 98     form = InputDialog()
 99     form.show()
100     app.exec_()
101 
102 if __name__ == '__main__':
103     main()

连接信号和槽函数中声明了对话框中用到的控件以及各按钮触发的槽函数。

单击姓名(Name)后的修改按钮触发 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()函数,弹出标准条目选择对话框,如下图。

第 71, 72, 73 行创建一个 QStringList 对象,包括两个 QString 项,用于标准输入对话框中下拉列表框的条目
显示。

第 74 行调用 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 控件中显示的文字是否可编辑,最后一个参数指明标准输入
对话框的窗体标识。

第 77 行判断 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 控件的步进值。

第 85 行判断 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 控件的步进值。

第 93 行判断 ok 的值,若用户单击了“OK”按钮,则把新输入的身高值更新至显示标签。

posted @ 2014-11-14 13:42  jakey.chen  阅读(701)  评论(0)    收藏  举报