pyqt图形化显示—4.便捷控件

设计一个完整的图形化显示肯定需要多个窗口啊,ui啊 为了方便进行设计,qtside6提供了很多便捷控件

弹出对话框

导入库

from PySide6.QtWidgets import QMessageBox
QMessageBox 弹出对话框库

界面

下面代码展示一下 就是一个按钮,点击后弹出对话框
 1     def __init__(self):
 2         super().__init__()  # 调用父类的__init__方法,初始化QWidget
 3 
 4         btn = QPushButton('弹出对话框')  # 创建按钮
 5         btn.clicked.connect(self.test)  # 连接按钮的clicked信号到槽函数
 6 
 7         ml = QVBoxLayout()  # 创建主布局
 8         ml.addWidget(btn)  # 添加到主布局中
 9 
10         self.setLayout(ml)  # 设置主布局
11 
12     def test(self):
13         QMessageBox.question(self, '提示', '这是一个对话框')
14         # QMessageBox.information(self, '提示', '这是一个对话框', QMessageBox.StandardButton.Ok)
15         # QMessageBox.warning(self, '提示', '这是一个对话框', QMessageBox.StandardButton.Ok)
16         # QMessageBox.critical(self, '提示', '这是一个对话框', QMessageBox.StandardButton.Ok)
17         # QMessageBox.about(self, '提示', '这是一个对话框')
弹出对话框界面展示

可以发现属性有很多种下面介绍一下,其实没有太大的区别,只有提示图标的变化

question  image    information  image    warning  image
critical  image    about  image

根据第一个函数和其他函数的不同用法,可以发现参数不同的作用

QMessageBox.属性名(self, '标题', '文字内容', 界面的交互按钮,默认按钮)
按钮如果不设置会自动设置为Yes和No,具体有什么提示按钮可以在python中QMessageBox.StandardButton. 【记得带点】查询一下,还是整合了很多的。那如果我不希望这个界面只有一个按钮怎么设置多个呢,可以使用分隔符设置多个。默认按钮就是在第五个参数位置重复一下希望默认的按钮,不设置默认为第一个。
QMessageBox.information(self, '提示', '这是一个对话框',
                                QMessageBox.StandardButton.Ok | QMessageBox.StandardButton.No | QMessageBox.StandardButton.Cancel)

这样我就设置了一个多按钮的弹出框

image

那么我们设置好了界面如何进行交互呢,其实QMessageBox.属性名()是有返回值的,返回值为按键名称【QMessageBox.StandardButton.按键名】,我们就可以根据返回值判断设置逻辑

文件交互

导入库

from PySide6.QtWidgets import QFileDialog
QFileDialog : 文件交互的库

界面

    def __init__(self):
        super().__init__()  # 调用父类的__init__方法,初始化QWidget
        self.resize(200, 150)

        btn = QPushButton('选择文件')  # 创建按钮
        btn.clicked.connect(self.test)  

        ml = QVBoxLayout()  # 创建主布局
        ml.addWidget(btn)

        self.setLayout(ml)  # 设置主布局

    def test(self):
        fname = QFileDialog.getOpenFileName(self, '选择文件', './', 'Text Files (*.txt);;All Files (*)')
        # fname = QFileDialog.getOpenFileNames(self, '选择文件', './', 'Text Files (*.txt);;All Files (*)')
        # fname = QFileDialog.getExistingDirectory(self, '选择文件', './')
        # fname = QFileDialog.getSaveFileName(self, '选择文件', './', 'Text Files (*.txt);;All Files (*)')
        print(fname)
文件交互界面演示

不同的属性对应不同的命令

getOpenFileName : 打开单个文件
getOpenFileNames : 打开多个文件
getExistingDirectory : 打开文件夹
getSaveFileName : 保存文件
 
getOpenFileName 和getOpenFileNames 的参数如下(self,‘标题名称’,‘文件夹打开路径’,‘过滤文件类型’)
self位置为窗口类型;过滤文件类型就行下图演示确定上方的下拉框【过滤文件格式:名称(*.希望的文件后缀 *.其他后缀);;名称(*.文件后缀)】需要注意整个过滤类型中符号均为英文格式,例如:
'All Files (*);;Text Files (*.txt);;py文件(*.py))'

image

 选择之后我们可以得到返回值

getOpenFileName  返回一个元组,第一个是文件地址,第二个是通过那个过滤类型中选择的

image

 getOpenFileNames  返回一个元组,第一个元素是一个列表,各个文件的地址;第二个同样是过滤类型名称

image

 getExistingDirectory 的参数为(窗体名称(sefl),‘标题名称’,‘打开文件夹的默认路径’)

image

getExistingDirectory  返回值为选择的文件夹地址  image

getSaveFileName  与打开文件类似,返回值同样为一个元组,第一个为保存文件地址,第二个为过滤类型。不同的是如果有同名文件夹,会提示是否覆盖,是会覆盖,否会返回一个有两个空元素的元组

image

 选择否,并关闭弹出的界面的返回值  image

 获取输入

导入库

from PySide6.QtWidgets import QInputDialog
QInputDialog : 获取输入的库

界面

 界面我们创建一个按钮,点击就弹出获取输入,按钮控件已经好多次展示了,这次就直接展示tex函数吧

    def test(self):
        #result = QInputDialog.getInt(self, '输入框', '请输入整数', 0, 0, 100, 1)
        #result, ok = QInputDialog.getDouble(self, '输入框', '请输入浮点数', 0.0, 0.0, 111.1,2)

        result, ok = QInputDialog.getText(self, '输入框', '请输入内容', QLineEdit.EchoMode.PasswordEchoOnEdit, '默认内容')
        #result, ok = QInputDialog.getMultiLineText(self, '输入框', '请输入内容', '默认内容')

        #result, ok = QInputDialog.getItem(self, '输入框', '请选择', ['选项1', '选项2', '选项3'],2,False)

        # if ok:
        print(result)

获取数字类:

QInputDialog.getInt 获取整型数字(窗体类型, ‘弹出窗口标题’, '弹出窗口内容', 默认数字, 最小数字, 最大数字, 步长)  image
         返回值是一个元组,获得的数字和你点击的按键;需要注意,如果点击否,返回数值为0   image
         其实观看界面就知道了这个窗口也可以根据输入框的右侧上下小箭头进行选择,只不过默认可以输入,所以可以更改
QInputDialog.getDouble 获取浮点型数字(窗体类型, ‘弹出窗口标题’, '弹出窗口内容', 默认数字, 最小数字, 最大数字, 浮点位数)  image
           返回值同整形一样,同样点否返回值为0,这里只返回了数字是因为在定义里分别定义了元组不同元素的名称  image

获取文字类

QInputDialog.getText 获取文本 (窗体类型, ‘弹出窗口标题’, '弹出窗口内容',文字类型QLineEdit.EchoMode.模式名称, '默认内容')

                                            image
 
          文字类型QLineEdit.EchoMode.模式名称 是什么呢,就是输入文本的显示方式可以有一下几种形式
          Normal  常规,没有任何变化
          NoEcho  有输入,但是文本框内不显示
          Password  输入在文本框内的字符加密,变为黑点
          还有其他形式,有兴趣可以自行探索一下
          
          返回值同样为元组,输入文本和点击的按键,点击否,返回空  image
QInputDialog.getMultiLineText  获取大量文本, (窗体类型, ‘弹出窗口标题’, '弹出窗口内容', '默认内容')  image
                返回值为元组,输入内容和按键;若按键为否内容为空

获取列表类

QInputDialog.getItem  列表,(窗体类型, ‘弹出窗口标题’, '[列表内容]', '默认内容列表下标',是否可编辑)  image
            若不单独设置,默认可编辑
            返回值为元组,选项内容和按键;需要注意无论点击是否,返回值会返回内容;如果可编辑,否会返回默认选项  image

字体修改

导入库

from PySide6.QtWidgets import QFontDialog, QColorDialog

常用word都知道,字体修改一种是字体、字号等等的修改,这部分使QFontDialog库;另一部分是颜色的修改,这部分使用QcolorDialog库

界面

    def __init__(self):
        super().__init__()  # 调用父类的__init__方法,初始化QWidget
        self.setWindowTitle('字体修改')  # 设置窗口标题

        self.textEdit = QTextEdit()  # 创建文本框
        self.btn1 = QPushButton('更改字体')  # 创建按钮
        self.btn2 = QPushButton('更改颜色')  # 创建按钮
        self.btn1.clicked.connect(self.test)
        self.btn2.clicked.connect(self.test)

        ml = QVBoxLayout()  # 创建主布局
        ml.addWidget(self.textEdit)  # 添加文本框到主布局
        ml.addWidget(self.btn1)
        ml.addWidget(self.btn2)

        self.setLayout(ml)  # 设置主布局

    def test(self):
        if self.sender() == self.btn1:
            ok, font = QFontDialog.getFont()
            if ok:
                self.textEdit.setFont(font)
        elif self.sender() == self.btn2:
            color = QColorDialog.getColor()
            if color.isValid():
                self.textEdit.setTextColor(color)
字体修改

我们创建一个文字输入框,点击下面两个按钮对输入框进行字体修改  image

输入字体后,点击按钮激活对应槽函数,由于功能类似就进行了整合,通过self.sender()检测点击的那个按键,由于是需要传参所以这次使用的self.的函数内全局命名方式

QFontDialog.getFont()  弹出一个字体修改界面

            image

          函数返回两个参数,一个是点击的按键,另一个是字体的相关参数

image

textEdit.setFont(字体参数)  这个就是对与该控件选择的字体参数对文本框进行修改,需要注意这个控件是对于整个文本框的内容进行修改
QColorDialog.getColor()  弹出一个颜色选择界面

            image

            返回值为颜色的参数(红通道,绿色通道,蓝通道,1)需要注意通道内数字为1以内的浮点数,例如 100 对应0.392;200对应0.7843

image

textEdit.setTextColor(颜色参数)  这个就是对与该控件选择的字体参数对文本框进行修改,需要注意这个控件的颜色修改相对于字体修改不同,它可以实现对于选定文本的字体颜色修改
posted @ 2026-01-07 21:02  Berserker兰斯洛特  阅读(63)  评论(0)    收藏  举报