这一章主要讲解一下标准输入对话框的知识。
对话框窗口或对话框是大多数现代GUI应用程序中不可或缺的一部分。
在计算机应用程序中,一个对话框是一个用于“与应用程序”通话的窗口。
对话框用于输入数据,修改数据,更改应用程序设置等。因为对话框涉及的内容比较多,我们计划分成几个章节来讲解,今天主要介绍输入对话框。
QInputDialog控件就是提供了一个简单的便利对话框,可以从用户获取单个值。 输入值可以是列表中的字符串,数字或项目。
通过一个例子来看看一下,直观感受一下。
效果如下:
正餐源代码如下:
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QInputDialog, QTextBrowser, QMessageBox, QGridLayout
from PyQt5.QtGui import QIcon
import sys
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 将控件对象添加到一个列表中
self.allWidget = []
grid = QGridLayout()
self.setLayout(grid)
self.setGeometry(500,500,800,480)
self.setWindowTitle('我与PyQt5有个约会 -- 标准输入对话框控件QInputDialog的应用')
self.setWindowIcon(QIcon('myico.ico'))
#---------------------------------------------------------------------------------------
# 姓名
#---------------------------------------------------------------------------------------
self.nameQLabel = QLabel('姓名 : ', self)
self.allWidget.append(self.nameQLabel)
self.nameTextQLabel = QLabel('樊晓鑫', self)
self.allWidget.append(self.nameTextQLabel)
self.nameQPushButton = QPushButton('修改姓名', self)
self.allWidget.append(self.nameQPushButton)
#---------------------------------------------------------------------------------------
# 年龄
#---------------------------------------------------------------------------------------
self.ageQLabel = QLabel('年龄 : ', self)
self.allWidget.append(self.ageQLabel)
self.ageTextQLabel = QLabel('18', self)
self.allWidget.append(self.ageTextQLabel)
self.ageTextQPushButton = QPushButton('修改年龄', self)
self.allWidget.append(self.ageTextQPushButton)
#---------------------------------------------------------------------------------------
# 性别
#---------------------------------------------------------------------------------------
self.genderQLabel = QLabel('性别 : ', self)
self.allWidget.append(self.genderQLabel)
self.genderTextQLabel = QLabel('男', self)
self.allWidget.append(self.genderTextQLabel)
self.genderTextQPushButton = QPushButton('修改性别', self)
self.allWidget.append(self.genderTextQPushButton)
#---------------------------------------------------------------------------------------
# 身高
#---------------------------------------------------------------------------------------
self.heightQLabel = QLabel('身高(cm) : ', self)
self.allWidget.append(self.heightQLabel)
self.heightTextQLabel = QLabel('175', self)
self.allWidget.append(self.heightTextQLabel)
self.heightTextQPushButton = QPushButton('修改身高', self)
self.allWidget.append(self.heightTextQPushButton)
#---------------------------------------------------------------------------------------
# 基本信息
#---------------------------------------------------------------------------------------
self.basicInformationQLabel = QLabel('基本信息 : ', self)
self.allWidget.append(self.basicInformationQLabel)
self.allWidget.append('')
self.basicInformationTextQPushButton = QPushButton('修改信息', self)
self.allWidget.append(self.basicInformationTextQPushButton)
self.basicInformationTextQTextBrowser = QTextBrowser(self)
self.allWidget.append(self.basicInformationTextQTextBrowser)
#---------------------------------------------------------------------------------------
# 控件位置安排
#---------------------------------------------------------------------------------------
positions = [(y, x) for y in range(0, 6) for x in range(0, 3)]
for position, name in zip(positions, self.allWidget):
if name == '':
continue
# 按预想放置控件
if position in [(5, 0)]:
grid.addWidget(name, *position, 3, 0)
else:
grid.addWidget(name, *position)
# 绑定按钮事件
if position in [(0, 2), (1, 2), (2, 2), (3, 2), (4, 2)]:
name.clicked.connect(self.showDialog)
#---------------------------------------------------------------------------------------
# 控件添加完毕
#---------------------------------------------------------------------------------------
self.show()
# 相关按钮功能的实现
def showDialog(self):
sender = self.sender()
sex = ['男','女']
if sender == self.nameQPushButton:
text, ok = QInputDialog.getText(self, '修改姓名', '请输入姓名 : ')
if ok:
self.nameTextQLabel.setText(text)
elif sender == self.ageTextQPushButton:
text, ok = QInputDialog.getInt(self, '修改年龄', '请输入年龄 : ', min = 1)
if ok:
self.ageTextQLabel.setText(str(text))
elif sender == self.genderTextQPushButton:
text, ok = QInputDialog.getItem(self, '修改性别', '请选择性别 : ', sex)
if ok:
self.genderTextQLabel.setText(text)
elif sender == self.heightTextQPushButton:
text, ok = QInputDialog.getDouble(self, '修改身高', '请输入身高 : ', min = 1.0)
if ok:
self.heightTextQLabel.setText(str(text))
elif sender == self.basicInformationTextQPushButton:
text, ok = QInputDialog.getMultiLineText(self, '修改信息', '请输入个人信息 : ')
if ok:
self.basicInformationTextQTextBrowser.setText(text)
# 关闭程序
def closeEvent(self, event):
reply = QMessageBox.question(self, '确认', '确认退出吗', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
这个小软件用到的所有控件如下:
1),网格布局QGridLayout
2),静态文本控件QLabel
3),按钮控件QPushButton
4),文本浏览框QTextBrowser
5),标准输入对话框QInputDialog
6),信息提示框QMessageBox
下面着重介绍一下这一章的主角标准输入对话框QInputDialog。
一、标准输入对话框的分类
QInputDialog有多种输入方式,下面介绍几种常用的
- ①单行字符串输入
- ②整数输入
- ③浮点数输入
- ④列表框选择输入
- ⑤多行文本
二、单行字符串输入对话框(getText函数)
getText(QWidget, str, str, echo: QLineEdit.EchoMode = QLineEdit.Normal,text: str = '', flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags(),inputMethodHints: Union[Qt.InputMethodHints, Qt.InputMethodHint] = Qt.ImhNone) -> Tuple[str, bool]
三、整数输入对话框(getInt函数)
getInt(QWidget, str, str, value: int = 0, min: int = -2147483647, max: int = 2147483647, step: int = 1, flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags()) -> Tuple[int, bool]
四、浮点数输入对话框(getDouble函数)
getDouble(QWidget, str, str, value: float = 0, min: float = -2147483647, max: float = 2147483647, decimals: int = 1, flags: Union[Qt.WindowFlags,Qt.WindowType]=Qt.WindowFlags())->Tuple[float,bool]
五、下拉列表选择输入对话框(getItem函数)
getItem(QWidget, str, str, Iterable[str], current:int=0,editable:bool=True,flags:Union[Qt.WindowFlags,Qt.WindowType]=Qt.WindowFlags(),inputMethodHints:Union[Qt.InputMethodHints,Qt.InputMethodHint] = Qt.ImhNone) -> Tuple[str, bool]
六、多行文本输入对话框(getMultiLineText函数)
getMultiLineText(QWidget, str, str, text: str = '', flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags(), inputMethodHints: Union[Qt.InputMethodHints, Qt.InputMethodHint] = Qt.ImhNone)-> Tuple[str, bool]