QInputDialog简介
在GUI应用中,经常有一些简单的输入信息需要交互,这时候可以使用QInputDialog来快速完成我们的工作,而不必创建一个新的对话框来实现。
QInputDialog控件是一个标准对话框,由一个文本框和两个按钮(ok和cancel)组成。当用户单击ok或enter键后,在父窗口可以收集通过QInputDialog控件输入的信息。在QInpuTDialog控件中可以输入数字,字符串或列表中的选项。
QInputDialog常用方法有:
- getInt(): 从控件中获得标准整数输入;
- getDouble(): 从控件中获得标准浮点数输入;
- getText(): 从控件中获得标准字符串的输入;
- getItem(): 从控件中获得列表里的选项输入;
- getMultiLineText(): 从控件中获得多行文本输入。
QInputDialog常用信号:
- textValueChanged: 当输入文本发生改变时,发射该信号;
- textValueSelected: 当输入文本被选中时,发射该信号;
- intValueChanged: 当输入的整数值发生改变时,发射该信号;
- intValueSelected: 当选中整数值时,发射该信号;
- doubleValueChanged: 当输入的浮点数发生改变时,发生该信号;
- doubleValueSelected: 当选中浮点数值时,发射该信号。
QInputDialog类继承关系:
测试QInputDialog
创建文件qinputdialog.py, 分别测试QInputDialog的四个方法:getItem, getText, getInt和getDouble。完整代码如下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QApplication, QWidget, QInputDialog, QFormLayout,
QPushButton, QLineEdit)
class DemoInputDialog(QWidget):
def __init__(self, parent=None):
super(DemoInputDialog, self).__init__(parent)
# 设置窗口标题
self.setWindowTitle('实战PyQt5: QInputDialog Demo!')
# 设置窗口大小
self.resize(320, 240)
self.initUi()
def initUi(self):
#创建一个表单布局
mainLayout = QFormLayout(self)
#设置内部控件之间的间隔
mainLayout.setSpacing(16)
min_width = 120
btnGetSel = QPushButton('列表选择输入对话框', self)
btnGetSel.setMinimumWidth(min_width)
btnGetSel.clicked.connect(self.onGetSelItem)
self.infoSel = QLineEdit(self)
self.infoSel.setReadOnly(True)
mainLayout.addRow(btnGetSel, self.infoSel)
btnGetTxt = QPushButton('字符串输入对话框', self)
btnGetTxt.setMinimumWidth(min_width)
btnGetTxt.clicked.connect(self.onGetText)
self.infoTxt = QLineEdit(self)
self.infoTxt.setReadOnly(True)
mainLayout.addRow(btnGetTxt, self.infoTxt)
btnGetInt = QPushButton('整数输入对话框')
btnGetInt.setMinimumWidth(min_width)
btnGetInt.clicked.connect(self.onGetInt)
self.infoInt = QLineEdit(self)
self.infoInt.setReadOnly(True)
mainLayout.addRow(btnGetInt, self.infoInt)
btnGetDbl = QPushButton('浮点数输入对话框')
btnGetDbl.setMinimumWidth(min_width)
btnGetDbl.clicked.connect(self.onGetDouble)
self.infoDbl = QLineEdit(self)
self.infoDbl.setReadOnly(True)
mainLayout.addRow(btnGetDbl, self.infoDbl)
self.setLayout(mainLayout)
def onGetSelItem(self):
#创建元组并并定义初始值
items = ('C', 'C++', 'C#', 'Java', 'Java Script', 'Go', 'Python')
#获取item输入的值,以及ok键的点击与否(True 或False)
item,ok=QInputDialog.getItem(self,"选择输入对话框",'语言列表',items,0,False)
if ok and item:
#满足条件时,设置单行文本框的文本
self.infoSel.setText(item)
def onGetText(self):
text,ok=QInputDialog.getText(self,'文本输入对话框','输入姓名:')
if ok:
self.infoTxt.setText(str(text))
def onGetInt(self):
num,ok=QInputDialog.getInt(self,'整数输入对话框','输入整数')
if ok:
self.infoInt.setText(str(num))
def onGetDouble(self):
value,ok=QInputDialog.getDouble(self,'浮点数输入对话框','输入浮点数')
if ok:
self.infoDbl.setText(str(value))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoInputDialog()
window.show()
sys.exit(app.exec())
运行结果如下图:
测试QInputDialog
本文知识点
- 在一些简单的输入信息交互场景下使用QInputDialog可提高开发效率;
- QInputDialog提供了几种常用的信息输入方式;
- 表单QFormLayout的运用;
- 设置按钮的最小宽度,以对齐按钮的排列。