PySide6 GUI 编程(26):QInputDialog的简单使用

2024-08-19 23:17:10 浏览数 (3)

示例代码

代码语言:python代码运行次数:0复制
from __future__ import annotations

import sys
from datetime import datetime

from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QInputDialog, QLineEdit, QMainWindow, QPushButton, QVBoxLayout, QWidget


def get_time_str() -> str:
    return datetime.now().isoformat(sep = ' ')


class MyMainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Hello, Input Dialog!')
        self.setToolTip('A PySide6 Input Dialog Application Demo')

        self.int_button = QPushButton('输入整数', self)
        self.int_button.clicked.connect(self.int_dialog_show)

        self.double_button = QPushButton('输入浮点数', self)
        self.double_button.clicked.connect(self.double_dialog_show)

        self.items_button = QPushButton('选择选项', self)
        self.items_button.clicked.connect(self.items_dialog_show)

        self.str_button = QPushButton('输入字符串', self)
        self.str_button.clicked.connect(self.str_dialog_show)

        self.multi_str_button = QPushButton('输入多行字符串', self)
        self.multi_str_button.clicked.connect(self.multi_str_dialog_show)

        v_layout = QVBoxLayout()
        v_layout.addWidget(self.int_button)
        v_layout.addWidget(self.double_button)
        v_layout.addWidget(self.items_button)
        v_layout.addWidget(self.str_button)
        v_layout.addWidget(self.multi_str_button)

        container = QWidget()
        container.setLayout(v_layout)

        self.setCentralWidget(container)

    def int_dialog_show(self):
        results = QInputDialog(self).getInt(self, '输入整数', '请输入:', 1, -1, 100, 1)
        print('输入整数的结果:', results, get_time_str())

    def double_dialog_show(self):
        results = QInputDialog(self).getDouble(self, '输入浮点数', '请输入:', 1.0, -1.0, 100.0, 3, step = 0.003)
        print('输入浮点数的结果:', results, get_time_str())

    def items_dialog_show(self):
        """
        Qt.InputMethodHint 是 Qt 框架中用于控制部件与输入法交互行为的枚举类型
        它提供了一系列的选项,用于向输入法提供关于期望的文本输入行为的提示:
            ImhNone: 不配置,使用系统默认的输入法行为
            ImhHiddenText: 输入的文本应被隐藏,适用于密码输入等场景
            ImhSensitiveData: 类似于 ImhHiddenText,用于敏感数据输入
            ImhNoAutoUppercase: 输入时不自动转换为大写字母
            ImhPreferNumbers: 偏好输入数字,适用于需要输入数字的字段
            ImhPreferUppercase: 偏好输入大写字母
            ImhPreferLowercase: 偏好输入小写字母
            ImhNoPredictiveText: 禁用预测性文本输入
            ImhDate: 适用于输入日期的字段
            ImhTime: 适用于输入时间的字段
            ImhPreferLatin: 偏好输入拉丁字符
            ImhMultiLine: 适用于多行文本输入
            ImhDigitsOnly: 仅允许输入数字
            ImhFormattedNumbersOnly: 允许输入格式化的数字
            ImhUppercaseOnly: 仅允许输入大写字母
            ImhLowercaseOnly: 仅允许输入小写字母
            ImhDialableCharacterOnly: 仅允许输入可拨号字符,如电话号码
            ImhEmailCharactersOnly: 允许输入电子邮件地址相关的字符
            ImhUrlCharactersOnly: 允许输入 URL 相关的字符
            ImhLatinOnly: 仅允许输入拉丁字符
            ImhExclusiveInputMask: 一个特殊的标志,用于指定一个独占的输入掩码,它将同时选中多个特定的标志
            inputMethodHints 属性只是一个提示,并不是所有输入法都会支持或遵守这些提示
        """
        results = QInputDialog(self).getItem(self, '选择选项', '请选择:',
                                             ['纯汉字', 'Option2', 'Choice3', '1234', 'abc', 'ABC', 'A1B2C3'],
                                             2, False,
                                             inputMethodHints = Qt.InputMethodHint.ImhDigitsOnly)
        print('输入选项的结果:', results, get_time_str())

    def str_dialog_show(self):
        """
            QLineEdit.Normal: 这是默认模式,用户输入的文本将正常显示。
            QLineEdit.NoEcho: 在这种模式下,用户输入的文本不会显示任何字符,通常用于密码字段以隐藏输入内容。
            QLineEdit.Password: 这种模式与 NoEcho 类似,但会用占位符(通常是点或星号)替换实际的输入字符,以便用户知道他们正在输入文本,但文本内容被隐藏。
            QLineEdit.PasswordEchoOnEdit: 当设置为这种模式时,用户输入的文本最初是隐藏的,但一旦用户开始编辑(例如,通过光标定位或使用退格键),文本就会变为可见。
        """
        results = QInputDialog(self).getText(self, '输入字符串', '请输入:', echo = QLineEdit.EchoMode.Password,
                                             text = '1234567890')
        print('输入字符串的结果:', results, get_time_str())

    def multi_str_dialog_show(self):
        results = QInputDialog(self).getMultiLineText(self, '输入多行字符串', '请输入:',
                                                      '1234567890nabcnde',
                                                      inputMethodHints = Qt.InputMethodHint.ImhMultiLine)
        print('输入多行字符串的结果:', results, get_time_str())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyMainWindow()
    window.show()
    app.exec()

运行效果

静态效果

静态界面效果静态界面效果

输入整数

输入整数演示效果输入整数演示效果

输入浮点数

输入浮点数输入浮点数

列表选择

列表选择列表选择

输入字符串

输入单行文本输入单行文本

输入多行文本

输入多行文本输入多行文本

0 人点赞