首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PyQt5 代码片段集合

PyQt5 代码片段集合

作者头像
王云峰
发布2019-12-25 16:12:52
发布2019-12-25 16:12:52
80100
代码可运行
举报
运行总次数:0
代码可运行

PyQt5是Qt的Python绑定库,既有Qt的强大,又有Python语言的简洁,要实现一个实际场景的GUI程序的时候,确实非常实用而且代码量不是太多。这里我总结了最近写一个界面时用到的代码片段,希望以后用到的时候能及时拾起来,也希望能帮助到别人。 此外我将这个内容也放到GitHub上,有兴趣的同学可以收藏下。

安装

目前PyQt主要是4和5版本,因为两者不兼容,因此官方建议使用PyQt5, 这里以Python3 为例进行说明。PyQt5通过pip3来安装,同时别忘了需要安装SIP,这是将Python代码转换为C或C++代码的工具。

代码语言:javascript
代码运行次数:0
运行
复制
pip3 install PyQt5 SIP

安装好后可以使用下面这个代码片段测试安装是否成功,如果可以正常运行说明安装已经成功:

代码语言:javascript
代码运行次数:0
运行
复制
import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget
from PyQt5.QtCore import QSize    
     
class HelloWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
 
        self.setMinimumSize(QSize(640, 480))    
        self.setWindowTitle("Hello world") 
        
        centralWidget = QWidget(self)          
        self.setCentralWidget(centralWidget)   
 
        gridLayout = QGridLayout(self)     
        centralWidget.setLayout(gridLayout)  
 
        title = QLabel("Hello World from PyQt", self) 
        title.setAlignment(QtCore.Qt.AlignCenter) 
        gridLayout.addWidget(title, 0, 0)
 
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = HelloWindow()
    mainWin.show()
    sys.exit( app.exec_() )

整体框架

代码语言:javascript
代码运行次数:0
运行
复制
from PyQt5.QtCore import QDir, Qt, QUrl, QObject
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtWidgets import (QApplication, QFileDialog, QHBoxLayout, QLabel,
        QPushButton, QSizePolicy, QSlider, QStyle, QVBoxLayout, QWidget,
        QGridLayout, QFileDialog,QMainWindow,QWidget, QPushButton, QAction,
        QSplitter, QFrame)
from PyQt5.QtGui import QIcon, QFont

class Demo(QMainWindow):
    def __init__(self, numCam=6, parent=None):
        super(ReIDDemo, self).__init__(parent)
        self.setWindowTitle("Video Person Re-ID Demo")
        ...

if __name__ == '__main__':
    app = QApplication(sys.argv)
    #app.setFont(QFont("Consolas", 10))
    demo = Demo(numCam=6)
    #demo.resize(1200, 800)
    demo.setGeometry(400, 30, 1200, 1000)
    demo.show()
    sys.exit(app.exec_())

下面就是各个组件的使用方式,只列出了一些常用的功能,别的功能还得在使用的时候再查找。

Button

代码语言:javascript
代码运行次数:0
运行
复制
btn = QPushButton()
btnsetEnabled(False)
btn.SetText("Open")
btn.setStyleSheet('{background-color: #A3C1DA; color: red;}')
lbl.setFont(QFont("Consolas", 12))
btn.clicked.connect(func)

def func():
    pass

Label

代码语言:javascript
代码运行次数:0
运行
复制
lbl = QLabel()
lbl.setText('Information')
lbl.setText("<font color='red'>Information</font>")
lbl.setFont(QFont("Consolas", 12))

Slider

代码语言:javascript
代码运行次数:0
运行
复制
positonSlider = QSlider(Qt.Horizontal)
positonSlider.setRange(0, 0)
positonSlider.sliderMoved.connect(setPosition)

def setPosition(position):
    pass

MediaPlayer

代码语言:javascript
代码运行次数:0
运行
复制
player = QMediaPlayer(None, QMediaPlayer.VideoSurface)
VideoWidget = QVideoWidget()
player.setVideoOutput(VideoWidget)
player.stateChanged.connect(playerStateChanged)
player.positionChanged.connect(playerPositionChanged)
player.durationChanged.connect(playerDurationChanged)
player.setMedia(QMediaContent(QUrl.fromLocalFile("/home/user/a.mp4"])))
player.play()   # 开始播放
player.pause()  # 暂停播放

def playerStateChanged(state):
    pass
def playerPositionChanged(position):
    pass
def playerDurationChanged(duration):
    pass

FileDialog

代码语言:javascript
代码运行次数:0
运行
复制
names = QFileDialog.getOpenFileName(self, "Open Query Video", 'd:/3rd')
if names[0]:
    pass
else:
    pass

Frame

代码语言:javascript
代码运行次数:0
运行
复制
leftWidget = QFrame()
leftWidget.setFrameShape(QFrame.StyledPanel)
leftWidget.setLayout(left)

QHBoxLayout

代码语言:javascript
代码运行次数:0
运行
复制
controlLayout = QHBoxLayout()
controlLayout.setContentsMargins(0, 0, 0, 0)
controlLayout.addWidget(btn)
controlLayout.addWidget(slider)

QVBoxLayout

代码语言:javascript
代码运行次数:0
运行
复制
controlLayout = QVBoxLayout()
controlLayout.setContentsMargins(0, 0, 0, 0)
controlLayout.addWidget(btn)
controlLayout.addWidget(slider)

QGridLayout

代码语言:javascript
代码运行次数:0
运行
复制
left = QGridLayout()
left.setSpacing(10)
left.addWidget(lblQuery, 0, 0, 1, 2)
left.addLayout(queryVideo.layout, 1, 0, 1, 2)
left.addWidget(btnOpen, 2, 0)
left.addWidget(btnSearch, 2, 1)
left.addWidget(lblHold, 5, 0, 1, 2)
left.setRowStretch(0, 1)
left.setRowStretch(1, 4)
left.setColumnStretch(1, 4)

Splitter

代码语言:javascript
代码运行次数:0
运行
复制
leftWidget = QFrame()
rightWidget = QFrame()
spliter1 = QSplitter(Qt.Horizontal)
spliter1.addWidget(leftWidget)
spliter1.addWidget(rightWidget)

教程和资源

  1. PyQt5 中文教程, 上手非常好的教程
  2. PyQt5 实例教程, 实例很全面
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 整体框架
  • Button
  • Label
  • Slider
  • MediaPlayer
  • FileDialog
  • Frame
  • QHBoxLayout
  • QVBoxLayout
  • QGridLayout
  • Splitter
  • 教程和资源
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档