专栏首页Yunfeng's Simple BlogPyQt5 代码片段集合

PyQt5 代码片段集合

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

安装

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

pip3 install PyQt5 SIP

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

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_() )

整体框架

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

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

lbl = QLabel()
lbl.setText('Information')
lbl.setText("<font color='red'>Information</font>")
lbl.setFont(QFont("Consolas", 12))

Slider

positonSlider = QSlider(Qt.Horizontal)
positonSlider.setRange(0, 0)
positonSlider.sliderMoved.connect(setPosition)

def setPosition(position):
    pass

MediaPlayer

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

names = QFileDialog.getOpenFileName(self, "Open Query Video", 'd:/3rd')
if names[0]:
    pass
else:
    pass

Frame

leftWidget = QFrame()
leftWidget.setFrameShape(QFrame.StyledPanel)
leftWidget.setLayout(left)

QHBoxLayout

controlLayout = QHBoxLayout()
controlLayout.setContentsMargins(0, 0, 0, 0)
controlLayout.addWidget(btn)
controlLayout.addWidget(slider)

QVBoxLayout

controlLayout = QVBoxLayout()
controlLayout.setContentsMargins(0, 0, 0, 0)
controlLayout.addWidget(btn)
controlLayout.addWidget(slider)

QGridLayout

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

leftWidget = QFrame()
rightWidget = QFrame()
spliter1 = QSplitter(Qt.Horizontal)
spliter1.addWidget(leftWidget)
spliter1.addWidget(rightWidget)

教程和资源

  1. PyQt5 中文教程, 上手非常好的教程
  2. PyQt5 实例教程, 实例很全面

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Sublime Text 使用技巧3

    这个插件用命令的形式来管理、设置主题Theme,省去了点击按钮的繁琐操作,对喜爱简单操作的用户来说很有用。 安装方式:Package Control Insta...

    王云峰
  • 使用rdesktop来在Windows和Linux之间共享数据

    rdesktop是一个开源的远程桌面客户端,用来从Linux机器连接到Windows机器。它遵循RDP协议(Remote Desktop Protocol),并...

    王云峰
  • 在Debian下搭建基于Apache-Php-MySQL的wordpress博客

    wordpress是一个流行的博客搭建框架,为不会html,css和js的人提供了搭建博客的便捷方式.我这里是在我的笔记本上搭建了一个wordpress博客,这...

    王云峰
  • 12.14 VR扫描:Magic Leap或下周发布新品;Dreamscape Immersive完成3000万B轮融资

    VRPinea
  • 反射

    一、反射的概念 1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提...

    人生不如戏
  • 我是如何从憋不出来,到完成二十万字书稿的?

    去年过年的时候,父母从乡下来到我在洛阳的家;晚上陪他们看完新闻联播后,我忍不住激动的心情,特意把北航出版社给我签的书稿合同捧出来给他们看,并郑重其事地介绍了一番...

    纯洁的微笑
  • Python3 与 C# 面向对象之~封装

    在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode/master 在线预览:http://github.lessch...

    逸鹏
  • Selenium2+python自动化59-数据驱动(ddt)

    前言 在设计用例的时候,有些用例只是参数数据的输入不一样,比如登录这个功能,操作过程但是一样的。如果用例重复去写操作过程会增加代码量,对应这种多组数据的测试用例...

    上海-悠悠
  • 一日一技:在Python类里面初始化自己

    这里的 __init__叫做 构造函数。它负责在类初始化为实例的时候,初始化必要的数据。如下图所示:

    青南
  • 爬取数据不保存,就是耍流氓 !

    OK,通过前面两篇文章《爬虫利器初体验(1)》《听说你的爬虫又被封了?(2)》,我们初体验也过了,爬虫代码健壮性也升级为 PLUS 了。都分析到这个地步了,是不...

    小小詹同学

扫码关注云+社区

领取腾讯云代金券