国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

PyQt5學(xué)習(xí)筆記--基于Qt Designer加載、播放和保存視頻

這篇具有很好參考價(jià)值的文章主要介紹了PyQt5學(xué)習(xí)筆記--基于Qt Designer加載、播放和保存視頻。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

1--基于Qt Designer設(shè)計(jì)ui文件

2--代碼

3--結(jié)果

4--補(bǔ)充

5--加載、播放、轉(zhuǎn)換和保存視頻的實(shí)例


1--基于Qt Designer設(shè)計(jì)ui文件

pyqt5中qvideowidget,Pyqt5學(xué)習(xí)筆記,qt,學(xué)習(xí),ui

2--代碼

from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5 import uic
import sys

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.ui = uic.loadUi("./video.ui")  # 加載由Qt Designer設(shè)計(jì)的ui文件

        # 加載自定義ui屬性
        self.openGLWidget = self.ui.openGLWidget
        self.video_btn1 = self.ui.pushButton
        self.video_btn2 = self.ui.pushButton_2

        # 創(chuàng)建一個(gè)布局將 QVideoWidget 內(nèi)嵌到 自定義ui的Widget中
        layout = QHBoxLayout()
        self.vw = QVideoWidget()
        layout.addWidget(self.vw)
        self.openGLWidget.setLayout(layout)

        # img_btn1 綁定槽函數(shù) loadVideo()
        self.video_btn1.clicked.connect(self.loadVideo)

        # img_btn2 綁定槽函數(shù) playVideo()
        self.video_btn2.clicked.connect(self.playVideo)

    def loadVideo(self):
        self.player = QMediaPlayer()
        self.player.setVideoOutput(self.vw) # 視頻播放的widget
        self.player.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0])) # 選取視頻文件

    def playVideo(self):
        self.player.play() # 播放視頻
        self.vw.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = MyWindow()
    w.ui.show()
    sys.exit(app.exec_())

3--結(jié)果

pyqt5中qvideowidget,Pyqt5學(xué)習(xí)筆記,qt,學(xué)習(xí),ui

pyqt5中qvideowidget,Pyqt5學(xué)習(xí)筆記,qt,學(xué)習(xí),ui

pyqt5中qvideowidget,Pyqt5學(xué)習(xí)筆記,qt,學(xué)習(xí),ui

4--補(bǔ)充

① 上述代碼只實(shí)現(xiàn)了加載視頻和播放視頻的功能,缺少暫停、進(jìn)度移動(dòng)等常見功能。

② 上述代碼將 QVideoWidget 通過一個(gè)layout布局的形式內(nèi)嵌到自定義的 QOpenGLWidget 中,但播放測試視頻的時(shí)候存在視頻無法覆蓋 Widget 的問題。

5--加載、播放、轉(zhuǎn)換和保存視頻的實(shí)例

① 基于Qt Designer 設(shè)計(jì) ui 文件

pyqt5中qvideowidget,Pyqt5學(xué)習(xí)筆記,qt,學(xué)習(xí),ui

② 代碼

注:代碼具有保存視頻的功能,轉(zhuǎn)換視頻則采取了最簡單的灰度化處理操作作為功能展示。

from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5 import uic
import sys
import cv2

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.ui = uic.loadUi("./video.ui")  # 加載由Qt Designer設(shè)計(jì)的ui文件

        # 加載自定義ui屬性
        self.openGLWidget1 = self.ui.openGLWidget
        self.QGraphView = self.ui.graphicsView
        self.video_btn1 = self.ui.pushButton
        self.video_btn2 = self.ui.pushButton_2
        self.gray_btn3 = self.ui.pushButton_3
        self.gray_btn4 = self.ui.pushButton_4

        # 創(chuàng)建一個(gè)布局將 QVideoWidget 內(nèi)嵌到 自定義ui的Widget1中
        layout1 = QHBoxLayout()
        self.vw1 = QVideoWidget()
        layout1.addWidget(self.vw1)
        self.openGLWidget1.setLayout(layout1)

        # video_btn1 綁定槽函數(shù) loadVideo()
        self.video_btn1.clicked.connect(self.loadVideo)

        # video_btn2 綁定槽函數(shù) playVideo()
        self.video_btn2.clicked.connect(self.playVideo)

        # gray_btn3 綁定槽函數(shù) convert_gray()
        self.gray_btn3.clicked.connect(self.convert_gray)

        # gray_btn4 綁定槽函數(shù) save_gray()
        self.gray_btn4.clicked.connect(self.save_gray)

    def loadVideo(self):
        self.player = QMediaPlayer()
        self.player.setVideoOutput(self.vw1) # 視頻播放的widget
        self.video_file = QFileDialog.getOpenFileUrl()[0]
        self.video_path = self.video_file.toString()[8:]
        print(self.video_path)
        self.player.setMedia(QMediaContent(self.video_file))# 選取視頻文件

    def playVideo(self):
        self.player.play() # 播放視頻
        self.vw1.show()

    def convert_gray(self):

        cap = cv2.VideoCapture(self.video_path)
        fps = cap.get(cv2.CAP_PROP_FPS)

        while True:
            ret, frame = cap.read()
            if not ret:
                break
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 灰度圖轉(zhuǎn)換
            frame = QImage(gray.data, gray.shape[1], gray.shape[0], gray.strides[0], QImage.Format_Indexed8)
            pix = QPixmap.fromImage(frame)
            item = QGraphicsPixmapItem(pix)  # 創(chuàng)建像素圖元
            scene = QGraphicsScene()  # 創(chuàng)建場景
            scene.addItem(item)
            self.QGraphView.setScene(scene)  # 將場景添加至視圖
            self.QGraphView.fitInView(item)  # 自適應(yīng)大小
            cv2.waitKey(int((1/fps)*1000))

        cap.release()

    def save_gray(self):
        self.output_path = self.video_path.rsplit("/", 1)[0] + '/gray_' + self.video_path.rsplit("/", 1)[1]
        cap = cv2.VideoCapture(self.video_path)
        h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
        w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
        fps = cap.get(cv2.CAP_PROP_FPS)
        fourcc = cv2.VideoWriter_fourcc(*'XVID')
        writer = cv2.VideoWriter(filename = self.output_path, fourcc = fourcc, fps = fps,
                                 frameSize = (int(w), int(h)), isColor = 0)
        while True:
            ret, frame = cap.read()
            if not ret:
                break
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 灰度圖轉(zhuǎn)換
            writer.write(gray)  # 保存灰度圖

        cap.release()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = MyWindow()
    w.ui.show()
    sys.exit(app.exec_())

?③ 結(jié)果展示:

pyqt5中qvideowidget,Pyqt5學(xué)習(xí)筆記,qt,學(xué)習(xí),ui

?文章來源地址http://www.zghlxwxcb.cn/news/detail-608618.html

到了這里,關(guān)于PyQt5學(xué)習(xí)筆記--基于Qt Designer加載、播放和保存視頻的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • PyQt5 Qt Designer使用(界面顯示與業(yè)務(wù)邏輯分離模式)

    PyQt5 Qt Designer使用(界面顯示與業(yè)務(wù)邏輯分離模式)

    Qt Designer運(yùn)行界面: MainWinSignalSlog02.ui Ui_MainWinSignalSlog02.py CallMainWinSignalSlog02.py

    2024年02月15日
    瀏覽(25)
  • PyQt5利用Qt Designer制作一個(gè)可以拖動(dòng)獲取文件信息的頁面

    PyQt5利用Qt Designer制作一個(gè)可以拖動(dòng)獲取文件信息的頁面

    前言 本篇在講什么 用pyqt5制作一個(gè)簡單的程序,拖動(dòng)文件或腳本可以讀取文件信息 本篇適合什么 適合 初學(xué)PyQt5 的小白 本篇需要什么 對 Python 語法有簡單認(rèn)知 對 Qt 有簡單認(rèn)知 依賴 Pycharm 編輯器 本篇的特色 具有全流程的 圖文教學(xué) 重實(shí)踐,輕理論,快速上手 提供全流程的

    2024年01月15日
    瀏覽(22)
  • PyQt5教程:如何在PyCharm中添加Qt Designer、PyUIC、PyRcc外部工具?

    PyQt5教程:如何在PyCharm中添加Qt Designer、PyUIC、PyRcc外部工具?

    Qt Designer 、PyUIC和PyRcc是Qt框架下的三個(gè)重要工具,總的來說,這三個(gè)工具各司其職,相輔相成,能顯著提升Qt開發(fā)的速度與效率。 Qt Designer:是一個(gè)用于創(chuàng)建圖形用戶界面的工具,可輕松構(gòu)建復(fù)雜的用戶界面。它基于MVC架構(gòu),可以將界面設(shè)計(jì)與邏輯分離,使得開發(fā)更為便捷。

    2024年04月28日
    瀏覽(25)
  • 【python】軟件開發(fā)——PyQt5、Qt Designer、信號(hào)與槽機(jī)制、計(jì)算器實(shí)現(xiàn)

    【python】軟件開發(fā)——PyQt5、Qt Designer、信號(hào)與槽機(jī)制、計(jì)算器實(shí)現(xiàn)

    PyQt5 是一個(gè)基于 Python 的 GUI 框架,用于創(chuàng)建跨平臺(tái)的桌面應(yīng)用程序。它是 Qt 庫的 Python 綁定,結(jié)合了 Python 的簡潔和易用性以及 Qt 框架的強(qiáng)大功能。 Qt 是一個(gè)流行的 C++ 跨平臺(tái)應(yīng)用程序開發(fā)框架,提供了豐富的圖形界面組件、網(wǎng)絡(luò)通信、數(shù)據(jù)庫訪問、多線程等功能。PyQt5 允許

    2024年02月04日
    瀏覽(55)
  • PyQt5利用Qt designer(QT設(shè)計(jì)師)使用tab widget和stacked widget實(shí)現(xiàn)多頁面切換

    PyQt5利用Qt designer(QT設(shè)計(jì)師)使用tab widget和stacked widget實(shí)現(xiàn)多頁面切換

    本文只提供一種設(shè)計(jì)思路來完成簡單的頁面切換功能,并沒有涉及頁面的美化以及復(fù)雜的業(yè)務(wù)功能實(shí)現(xiàn)。 點(diǎn)擊tab頁對tab widget的tab頁進(jìn)行切換效果圖: 點(diǎn)擊radio button驅(qū)動(dòng)stacked widget多頁面切換效果圖: 下面進(jìn)行分步說明。 打開qt designer,新建一個(gè)widget窗口。 將一個(gè)tab widget拖

    2024年02月03日
    瀏覽(34)
  • python中的yolov5結(jié)合PyQt5,使用QT designer設(shè)計(jì)界面沒正確啟動(dòng)的解決方法

    python中的yolov5結(jié)合PyQt5,使用QT designer設(shè)計(jì)界面沒正確啟動(dòng)的解決方法

    一、窗體設(shè)計(jì)test: 默認(rèn)你已經(jīng)設(shè)計(jì)好了窗體后: 這時(shí)你需要的是保存生成的untitle.ui到某個(gè)文件夾下,然后在命令行中獎(jiǎng).ui轉(zhuǎn)換為.py(,通過??pyqt5???提供的轉(zhuǎn)換工具,將??ui???文件轉(zhuǎn)換成??python??的代碼) 或者使用在PyCharm中安裝的工具: 然后你會(huì)看到mai

    2024年02月07日
    瀏覽(32)
  • 安裝 Pyqt5 和 Designer

    安裝 Pyqt5 和 Designer

    Name– PyUIC Program– E:pythonpythonpython.exe (你的python文件路徑) Arguments– -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py Working directory– $FileDir$

    2024年01月23日
    瀏覽(65)
  • pyqt5使用Designer實(shí)現(xiàn)按鈕上傳圖片

    pyqt5使用Designer實(shí)現(xiàn)按鈕上傳圖片

    1、ui界面 2、ui轉(zhuǎn)py代碼 其中 uploadimg.py 代碼如下: 3、upload_main.py主函數(shù)代碼 upload_main.py 代碼如下: 4、效果圖

    2024年02月04日
    瀏覽(25)
  • PyQt5 UI Designer使用pyqtgraph繪制波形

    PyQt5 UI Designer使用pyqtgraph繪制波形

    包含了兩個(gè)QWidget控件也可以是QGraphicsView控件類型。 兩個(gè)控件分別提升為pyqtgraph.GraphicsLayoutWidget類型和pyqtgraph.PlotWidget GraphicsLayoutWidget類型通過addPlot方法添加波形數(shù)據(jù),每個(gè)波形都占有獨(dú)立的區(qū)域。 plt1 = self.graphicsLayout.addPlot(y=np.random.normal(size=1000), title=“溫度”) plt2 = self.

    2024年02月06日
    瀏覽(28)
  • PyQt5學(xué)習(xí)筆記--多線程處理、數(shù)據(jù)交互

    PyQt5學(xué)習(xí)筆記--多線程處理、數(shù)據(jù)交互

    目錄 1--引入多線程的原因 2--PyQt多線程的基本知識(shí) 3--多線程登錄程序的實(shí)例 4--參考 ① 如果Qt只采用單線程任務(wù)的方式,當(dāng)遇到數(shù)據(jù)處理慢的情形時(shí),會(huì)出現(xiàn)GUI卡死的情況。 ② 使用下述例子展示單線程任務(wù)的缺陷: ③ 代碼: ④ 結(jié)果展示: 當(dāng)點(diǎn)擊第一個(gè)button時(shí),GUI會(huì)出現(xiàn)卡

    2023年04月16日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包