PyQt5:交互框系列

1、介绍

pyqt5中的交互框有很多种,先介绍我用到的,后续有用到的再慢慢补充

2、文件选择框:QFileDialog

在这里插入图片描述
通过以下代码实现:

imgName, imgType = QFileDialog.getOpenFileName(parent=None, caption="打开图片", directory="", filter="*.jpg;;*.png;;All Files(*)")

parameter:

  • parent:为父窗体,这里是通过加载ui文件的形式加载的ui,所以设为None
  • caption:显然是窗口的title
  • directory:表示打开窗口后显示的文件夹路径,"."表示打开和程序同级目录
  • filter:表示限定了文件夹路径

return:

  • imgName:用户选中的文件的路径
  • imgType:文件的后缀名

3、消息框:QMessageBox

在这里插入图片描述

reply = QMessageBox.information(self, "标题", "消息正文", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

parameter:

  • self:当没有或者通过ui文件加载的ui时,应写为None
  • “标题”:标题
  • “消息正文”:消息正文
  • QMessageBox.Yes | QMessageBox.No:你想要显示的按钮
  • QMessageBox.No:默认按钮(即图中蓝色边框选择)

return:

  • reply:是你选择的按钮,reply==QMessageBox.Yes 或者 reply==QMessageBox.No

3.1、其他类型的QMessageBox

  • QMessageBox.information()
    在这里插入图片描述
  • QMessageBox.warning()
    在这里插入图片描述
  • 还有很多其他的,自行百度

3.2、非主线程使用QMessageBox

在pyqt5中只有MainWindow是主线程,而QMessageBox只能在主线程使用,即不能在新开的线程中使用QMessageBox,否则弹框会卡死。

所以通过QThread来在非主线程进行弹框的触发

参考:
1. PyQt5 在非主线程(GUI线程)中实现弹窗
2. PyQt5 中信号signal 与 槽 slot 的相关知识

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys

class Message(QThread):
    signal = pyqtSignal()
    def __init__(self, Window):
        super(Message, self).__init__()
        self.window = Window
    def run(self):
        self.signal.emit()

class MainWindow(QMainWindow):
    def __init__(self,parent=None):
        super(MainWindow, self).__init__(parent)
        self.setWindowTitle("MainWindow")   # 主界面
        self.resize(600, 400)

        self.button = QPushButton(self)     # 定义按钮
        self.button.setText("点击弹出对话框")
        self.button.move(50, 50)
        # 绑定slot函数
        self.button.clicked.connect(self.fun)   # 定义按钮触发
        # 上面是用按钮->func()->box
        # 也可以在你想要触发的地方直接执行self.message.start(),触发弹框

        self.message = Message(None)
        self.message.signal.connect(self.box)   # 一旦message执行start(),就会触发box()函数

    def box(self):
        QMessageBox.information(None, 'Warning', '未入库对象', QMessageBox.Ok)
        self.UnKnowKey=True

    def fun(self):
        self.message.start()    # 通知开始弹窗
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = MainWindow()
    demo.show()
    sys.exit(app.exec_())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一个对称矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值