我与PyQt5有个约会系列教程(8):标准输入对话框控件QInputDialog的应用

这一章主要讲解一下标准输入对话框的知识。

对话框窗口或对话框是大多数现代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]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值