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 国际许可协议进行许可。