pyqt5简单入门

pyqt5简单入门

数据挖掘作业需要做UI,学了一点,发现资料挺少的,这里记录下用过的功能。主要使用designer设计,简单快捷。pyqt实现了界面与业务逻辑的分离,不仅逻辑清晰而且维护方便。

安装

安装是个比较麻烦的事情,一开始anaconda和pip交叉使用,各种报错,原因可能是anaconda管理的包和pip的版本不同,导致升级了这里那里不匹配,降级了那里这里又报错了。无奈之下选择了抛弃anaconda,使用pip两分钟搞定。

基本使用框架

#!/usr/bin/python3
# -*- coding: utf-8 -*-
#基本框架

import sys
#PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import QApplication, QMainWindow
#导入designer工具生成的login模块
from login import Ui_Form

class MyMainForm(QMainWindow, Ui_Form):
    def __init__(self, parent=None):
        super(MyMainForm, self).__init__(parent)
        self.setupUi(self)
        #添加登录按钮信号和槽。注意display函数不加小括号()
        self.login_Button.clicked.connect(self.display)
        self.cancel_Button.clicked.connect(self.close)

    #def display(self):
    #    self.user_textBrowser.setText("登录成功!")

    @QtCore.pyqtSlot()
    def on_login_Button_clicked(self):
        self.user_textBrowser.setText("登录成功!")

if __name__ == "__main__":
#固定的,PyQt5程序都需要QApplication对象。
#sys.argv是命令行参数列表,确保程序可以双击运行
    app = QApplication(sys.argv)
    #初始化
    myWin = MyMainForm()
    #将窗口控件显示在屏幕上
    myWin.show()
    #程序运行,sys.exit方法确保程序完整退出。
    sys.exit(app.exec_())

designer设计完成后需要通过以下方式转换成py文件使用

pyuic5 -o UI.py UI.ui #将生成的ui文件转换为py文件使用

信号槽机制

信号槽是Qt的核心机制,也是PyQt编程中对象进行通信的机制。在Qt中,QObject对象和PyQt中所有继承自QWidget的控件都支持信号槽机制。当信号发射时,连接的槽函数会自动执行。在PyQt5中,信号与槽函数通过object.signal.connect()方法进行连接。

内置信号是QObject对象自动定义的信号,内置槽函数是QObject对象自动定义的槽函数,可以通过QObject.signal.connect函数将QObject对象的内置信号连接到QObject对象的槽函数。

#自定义信号与自定义槽函数
import sys
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton

class MainWindow(QWidget):
    closeSignal = pyqtSignal()

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("MainWindow Demo")
        self.resize(800, 600)

        button = QPushButton("close", self)
        # 连接内置信号与自定义槽
        button.clicked.connect(self.onClicked)
        # 连接自定义信号closeSignal与自定义槽函数onclose
        self.closeSignal.connect(self.onClose)

    # 自定义槽函数
    def onClicked(self):
        # 发送自定义信号
        self.closeSignal.emit()

    # 自定义槽函数
    def onClose(self):
        self.close()

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

    sys.exit(app.exec_())
#信号与槽装饰器
@PyQt5.QtCore.pyqtSlot(bool)
def on_发送者对象名称_发射信号名称(self, parameter):
    pass

#实例
@QtCore.pyqtSlot()
def on_Button1_clicked(self):
    print("Button1 is clicked")

对话框

reply = QMessageBox.information(self,"提示对话框","这是一个提示对话框", QMessageBox.Ok | QMessageBox.Close, QMessageBox.Close)

reply = QMessageBox.question(self,"询问对话框窗口标题!","这是一个询问对话框。。。",QMessageBox.Yes|QMessageBox.No|QMessageBox.Cancel,QMessageBox.No)

reply = QMessageBox.warning(self,'警告','这是一个警告消息对话框', QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel, QMessageBox.Save)

reply = QMessageBox.critical(self,'错误','这是一个错误消息对话框', QMessageBox.Retry | QMessageBox.Abort | QMessageBox.Ignore , QMessageBox.Retry)

msgBox = QMessageBox.about(self,"关于对话框标题","这是一个关于对话框")

资源文件

新建.qrc文件,导入designer,设置``prefix`前缀后将需要的文件复制到目录下即可使用。

.qrc文件是一个XML格式的文件,描述了资源文件相对于.qrc的路径。

pyrcc5 -o icon_rc.py icon.qrc #资源的使用,_rc 默认后缀
import icon_rc
QPixmap(":/***") #冒号 + prefix路径前缀 + file相对路径

toolbar statusbar menubar

比较简单,设计一个Qaction,拖到toolbar即可固定,menubar自动连接相应的Qaction,在menubar设置动作,固定的toolbar,简单方便。

知乎一个系列教程

以上,后续遇到再补充。

本作品采用知识共享署名 4.0 国际许可协议进行许可。


  转载请注明: Dufan pyqt5简单入门

  目录