亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > Python做個自定義動態(tài)壁紙還可以放視頻

Python做個自定義動態(tài)壁紙還可以放視頻

熱門標(biāo)簽:沈陽防封電銷電話卡 高德地圖標(biāo)注收入咋樣 鶴壁手機(jī)自動外呼系統(tǒng)違法嗎 銀川電話機(jī)器人電話 B52系統(tǒng)電梯外呼顯示E7 地圖標(biāo)注多個 怎么辦理400客服電話 企業(yè)微信地圖標(biāo)注 萊蕪電信外呼系統(tǒng)

前言

前段時間,用PyQt5寫了幾篇文章,自己用python做的一款超炫酷音樂播放器、用Python做個個性的動畫掛件讓桌面不單調(diào)、詳細(xì)過程帶你用Python做車牌自動識別系統(tǒng)。今天就繼續(xù)給大家分享一個實戰(zhàn)案例,帶大家一起用Python的PyQt5開發(fā)一個自定義動態(tài)桌面壁紙,好玩又有趣!

首先一起來看看最終實現(xiàn)的自定義動態(tài)壁紙效果:

面,我們開始介紹這個自定義動態(tài)桌面的制作過程。

一、核心功能設(shè)計

總體來說,我們需要實現(xiàn)將自己喜歡的視頻轉(zhuǎn)成一個動態(tài)桌面,知識點主要包含了對視頻提取解析,視頻輪播,PyQt5窗體設(shè)置,桌面句柄獲取,自定義動態(tài)桌面壁紙實現(xiàn)等。

拆解需求,大致可以整理出我們需要分為以下幾步完成:

  1. UI排版布局設(shè)計,確認(rèn)動態(tài)壁紙功能設(shè)計
  2. 加載視頻,對視頻進(jìn)行預(yù)覽讀取,保存視頻路徑等
  3. 動態(tài)壁紙功能實現(xiàn)應(yīng)用,獲取桌面句柄,輪播加載視頻
  4. 關(guān)閉動態(tài)壁紙,在線壁紙資源獲取等

二、實現(xiàn)步驟

之前有粉絲反饋說,想自己跟著文章自己敲敲代碼,但是不知道具體需要哪些模塊、包文件,后面我就把所有用到模塊先放出來。

import os
import sys
from subprocess import call
from threading import Thread
from time import sleep

import cv2
from PyQt5 import QtCore,  QtWidgets
from PyQt5.QtCore import Qt,  QTimer
from PyQt5.QtGui import QImage, QPixmap, QIcon

from PyQt5.QtWidgets import QGridLayout, QPushButton, QMainWindow, QFileDialog, QLabel, QSystemTrayIcon, \

    QAction, QMenu, QMessageBox
from os import path as pathq

1. UI排版布局設(shè)計

根據(jù)動態(tài)壁紙所需要的功能,首先進(jìn)行UI布局設(shè)計,我們這次還是使用的pyqt5。主要包含了加載讀取本地視頻、視頻加載預(yù)覽、動態(tài)壁紙應(yīng)用、動態(tài)壁紙關(guān)閉等。核心設(shè)計代碼如下:

# author:CSDN-Dragon少年
def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(505, 615)
    MainWindow.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
    self.centralwidget = QtWidgets.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")
    self.pushButton = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton.setGeometry(QtCore.QRect(22, 10, 89, 31))
    self.pushButton.setObjectName("pushButton")
    self.pushButton.clicked.connect(self.openmp4)
    self.pushButton.setStyleSheet(
        '''QPushButton{background:#F7D674;border-radius:5px;}QPushButton:hover{background:yellow;}''')
    self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
    self.groupBox.setGeometry(QtCore.QRect(22, 50, 452, 351))
    self.groupBox.setObjectName("groupBox")
    self.widget = QtWidgets.QWidget(self.groupBox)
    self.widget.setGeometry(QtCore.QRect(11, 20, 430, 291))
    self.widget.setObjectName("widget")
    self.gridLayout_3 = QtWidgets.QGridLayout(self.widget)
    self.gridLayout_3.setObjectName("gridLayout_3")
    self.label = QLabel(self)
    self.label.resize(400, 300)
    self.label.setText("Waiting for video...")
    self.gridLayout_3.addWidget(self.label)
    self.close_widget = QtWidgets.QWidget(self.centralwidget)
    self.close_widget.setGeometry(QtCore.QRect(420, 0, 93, 41))
    self.close_widget.setObjectName("close_widget")
    self.close_layout = QGridLayout()  # 創(chuàng)建左側(cè)部件的網(wǎng)格布局層
    self.close_widget.setLayout(self.close_layout)  # 設(shè)置左側(cè)部件布局為網(wǎng)格
    self.left_close = QPushButton("")  # 關(guān)閉按鈕
    self.left_close.clicked.connect(self.close)
    self.left_visit = QPushButton("")  # 空白按鈕
    #self.left_visit.clicked.connect(MainWindow.big)
    self.left_mini = QPushButton("")  # 最小化按鈕
    self.left_mini.clicked.connect(MainWindow.mini)
    self.close_layout.addWidget(self.left_mini, 0, 0, 1, 1)
    self.close_layout.addWidget(self.left_close, 0, 2, 1, 1)
    self.close_layout.addWidget(self.left_visit, 0, 1, 1, 1)
    self.left_close.setFixedSize(15, 15)  # 設(shè)置關(guān)閉按鈕的大小
    self.left_visit.setFixedSize(15, 15)  # 設(shè)置按鈕大小
    self.left_mini.setFixedSize(15, 15)  # 設(shè)置最小化按鈕大小
    self.left_close.setStyleSheet(
        '''QPushButton{background:#F76677;border-radius:5px;}QPushButton:hover{background:red;}''')
    self.left_visit.setStyleSheet(
        '''QPushButton{background:#F7D674;border-radius:5px;}QPushButton:hover{background:yellow;}''')
    self.left_mini.setStyleSheet(
        '''QPushButton{background:#6DDF6D;border-radius:5px;}QPushButton:hover{background:green;}''')
    self.horizontalLayout = QtWidgets.QHBoxLayout(self.close_widget)
    self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
    self.horizontalLayout.setObjectName("horizontalLayout")
    self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton_2.setGeometry(QtCore.QRect(77, 440, 133, 41))
    self.pushButton_2.setObjectName("pushButton_2")
    self.pushButton_2.clicked.connect(self.play)
    self.pushButton_2.setStyleSheet(
        '''QPushButton{background:#6DDF6D;border-radius:5px;}QPushButton:hover{background:green;}''')
    self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton_3.setGeometry(QtCore.QRect(308, 440, 111, 41))
    self.pushButton_3.setObjectName("pushButton_3")
    self.pushButton_3.clicked.connect(self.close_wall)
    self.pushButton_3.setStyleSheet(
        '''QPushButton{background:#F76677;border-radius:5px;}QPushButton:hover{background:red;}''')
    self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton_4.setGeometry(QtCore.QRect(187, 540, 133, 21))
    self.pushButton_4.setObjectName("pushButton_4")
    self.pushButton_4.clicked.connect(self.openurl)
    self.pushButton_4.setStyleSheet(
        '''QPushButton{background:#222225;color:white;border-radius:5px;}QPushButton:hover{background:#222225;color:skyblue}''')
    MainWindow.setCentralWidget(self.centralwidget)
    self.menubar = QtWidgets.QMenuBar(MainWindow)
    self.menubar.setGeometry(QtCore.QRect(0, 0, 505, 23))
    self.menubar.setObjectName("menubar")
    MainWindow.setMenuBar(self.menubar)
    self.statusbar = QtWidgets.QStatusBar(MainWindow)
    self.statusbar.setObjectName("statusbar")
    MainWindow.setStatusBar(self.statusbar)
    self.retranslateUi(MainWindow)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)
    self.groupBox.setStyleSheet('''
    color:white
    ''')
    MainWindow.setWindowOpacity(0.95)  # 設(shè)置窗口透明度
    MainWindow.setAttribute(Qt.WA_TranslucentBackground)
    MainWindow.setWindowFlag(Qt.FramelessWindowHint)  # 隱藏邊框
# author:Dragon少年
def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    self.pushButton.setText(_translate("MainWindow", "從本地選擇"))
    self.groupBox.setTitle(_translate("MainWindow", "預(yù)覽"))
    self.pushButton_2.setText(_translate("MainWindow", "應(yīng)用"))
    self.pushButton_3.setText(_translate("MainWindow", "關(guān)閉壁紙"))
    self.pushButton_4.setText(_translate("MainWindow", "在線資源"))

UI實現(xiàn)效果如下:

 

UI布局設(shè)計完成,下面我們開始進(jìn)行視頻讀取加載、預(yù)覽功能實現(xiàn)。

2. 視頻加載預(yù)覽

接來下我們可以根據(jù)自己喜歡的視頻,從本地讀取視頻,并且將視頻預(yù)覽播放顯示。這里視頻演示,博主還是用之前的那篇紫顏小姐姐的跳舞視頻進(jìn)行演示。

讀取視頻:

讀取視頻我們可以通過打開文件對話框,選擇視頻資源,開啟一個子線程用來進(jìn)行視頻開啟停止播放。核心代碼如下:

# author: CSDN-Dragon少年
def openmp4(self):
    try:
        global path
        path, filetype = QFileDialog.getOpenFileName(None, "選擇文件", '.',
                                                     "視頻文件(*.AVI;*.mov;*.rmvb;*.rm;*.FLV;*.mp4;*.3GP)")  # ;;All Files (*)
        if path == "":  # 未選擇文件
            return

        self.slotStart()
        t = Thread(target=self.Stop)
        t.start()  # 啟動線程,即讓線程開始執(zhí)行
    except Exception as e:
        print (e)

視頻流讀取播放:

接下來,我們需要對視頻文件進(jìn)行按幀讀取加載顯示,并通過計時器實現(xiàn)動畫效果。核心代碼如下:

# author:CSDN-Dragon少年
def slotStart(self):
    videoName = path
    if videoName != "":  # “”為用戶取消
        self.cap = cv2.VideoCapture(videoName)
        self.timer_camera.start(50)
        self.timer_camera.timeout.connect(self.openFrame)
# author:CSDN-Dragon少年
def openFrame(self):
    if (self.cap.isOpened()):
        ret, self.frame = self.cap.read()
        if ret:
            frame = cv2.cvtColor(self.frame, cv2.COLOR_BGR2RGB)
            if self.detectFlag == True:
                # 檢測代碼self.frame
                self.label_num.setText("There are " + str(5) + " people.")
            height, width, bytesPerComponent = frame.shape
            bytesPerLine = bytesPerComponent * width
            q_image = QImage(frame.data, width, height, bytesPerLine,
                             QImage.Format_RGB888).scaled(self.label.width(), self.label.height())
            self.label.setPixmap(QPixmap.fromImage(q_image))
        else:
            self.cap.release()
            self.timer_camera.stop()  # 停止計時器

至此,我們已經(jīng)可以實現(xiàn)視頻讀取加載,并且進(jìn)行視頻預(yù)覽了,效果如下:

3. 動態(tài)壁紙功能實現(xiàn)

實現(xiàn)桌面壁紙?zhí)鎿Q,我們首先需要獲取桌面句柄找到桌面窗體,覆寫桌面窗體、調(diào)用加載的視頻流,播放動態(tài)壁紙。

獲取桌面句柄:

# author:CSDN-Dragon少年
def pretreatmentHandle():
    hwnd = win32gui.FindWindow("Progman", "Program Manager")
    win32gui.SendMessageTimeout(hwnd, 0x052C, 0, None, 0, 0x03E8)
    hwnd_WorkW = None
    while 1:
        hwnd_WorkW = win32gui.FindWindowEx(None, hwnd_WorkW, "WorkerW", None)
        if not hwnd_WorkW:
            continue
        hView = win32gui.FindWindowEx(hwnd_WorkW, None, "SHELLDLL_DefView", None)
        # print('hwmd_hView: ', hView)
        if not hView:
            continue
        h = win32gui.FindWindowEx(None, hwnd_WorkW, "WorkerW", None)
        while h:
            win32gui.SendMessage(h, 0x0010, 0, 0)  # WM_CLOSE
            h = win32gui.FindWindowEx(None, hwnd_WorkW, "WorkerW", None)
        break
    return hwnd

桌面覆寫:

我們可以創(chuàng)建一個類,對窗體進(jìn)行繼承,進(jìn)行視頻流加載讀取播放。核心代碼如下:

# author: CSDN-Dragon少年
class MyMainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MyMainWindow, self).__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.player = QMediaPlayer()
        self.player.setNotifyInterval(10000)
        self.player.setVideoOutput(self.ui.videowidget)
        self.player.setMuted(bool(1 - self.player.isMuted()))
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setupUi(self)
        self.go()


	# author: CSDN-Dragon少年
    def go(self):
        self.ui.videowidget.setFullScreen(True)

        with open("./filename.txt", 'r', encoding='utf-8') as f:
            file_name = f.read()
            if file_name =='':
                file_name = 'lkf.mp4'
        print (file_name)
        if not os.path.exists(file_name):
            sys.exit()
        media = QMediaContent(QUrl(file_name))
        self.player.setMedia(media)
        self.mplayList = QMediaPlaylist()
        self.mplayList.addMedia(QMediaContent(QUrl.fromLocalFile(file_name)))
        self.player.setPlaylist(self.mplayList)
        self.mplayList.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
        win_hwnd = int(self.winId())
        video_h = int(self.ui.videowidget.winId())
        win32gui.SetParent(win_hwnd, h)
        win32gui.SetParent(video_h, h)
        win32gui.SetParent(video_h, win_hwnd)
        self.player.play()

這里我們把上面的py文件直接打包成exe文件,接下來我們在“應(yīng)用”控件上進(jìn)行事件綁定,直接調(diào)用exe執(zhí)行,實現(xiàn)動態(tài)壁紙播放應(yīng)用功能。核心代碼如下:

# author: CSDN-Dragon少年
def play(self):
     if path == '':
         reply = QtWidgets.QMessageBox.question(self, '提示',
                                                "未加載選擇視頻",
                                                QtWidgets.QMessageBox.Yes)
         return
     with open("./filename.txt", 'w', encoding='utf-8') as f:
         f.truncate(0)
         print(f.write(str(path)))
     try:
         try:
             call('taskkill /F /IM play.exe')
         except:
             pass
         os.system('start play.exe')
     except:
         pass
     try:
         if self.cap != []:
             self.cap.release()
             self.timer_camera.stop()  # 停止計時器
         else:
             Warming = QMessageBox.warning(self, "Warming", "Push the left upper corner button to Quit.",
                                           QMessageBox.Yes)
     except:
         pass

這樣,我們就完成了動態(tài)壁紙加載應(yīng)用功能了,效果如下:

4. 關(guān)閉動態(tài)壁紙

最后我們再實現(xiàn)下當(dāng)前動態(tài)壁紙播放關(guān)閉功能,我們需要對當(dāng)前桌面視頻播放進(jìn)行釋放取消。代碼如下:

# author:CSDN-Dragon少年
 def close_wall(self):
     try:
         call('taskkill /F /IM play.exe')
     except:
         pass

效果如下:

至此,整個自定義動態(tài)桌面壁紙功能就全部完成了,下面我們一起運行下看看動態(tài)壁紙效果。

今天我們就到這里,明天繼續(xù)努力!

 

到此這篇關(guān)于Python做個自定義動態(tài)壁紙還可以放視頻的文章就介紹到這了,更多相關(guān)Python動態(tài)視頻壁紙內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 用python制作個視頻下載器
  • Python代碼生成視頻的縮略圖的實例講解
  • 使用Python編寫簡單的畫圖板程序的示例教程
  • Python趣味編程實現(xiàn)手繪風(fēng)視頻示例

標(biāo)簽:三亞 葫蘆島 安慶 烏魯木齊 呼倫貝爾 呼倫貝爾 銀川 湘西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python做個自定義動態(tài)壁紙還可以放視頻》,本文關(guān)鍵詞  Python,做個,自定義,動態(tài),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python做個自定義動態(tài)壁紙還可以放視頻》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python做個自定義動態(tài)壁紙還可以放視頻的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产网站免费| 91麻豆国产级在线| 青青久久精品| 日韩男人天堂| 四虎影视久久久| 欧美激情一区二区三区在线| 国产91精品系列在线观看| 午夜精品国产自在现线拍| 中文字幕97| 97视频免费在线| 午夜家庭影院| 一本伊大人香蕉高清在线观看| 亚欧视频在线| 一级毛片视频在线观看| 青青久热| 国产成人精品综合在线| 二级片在线观看| 午夜精品国产自在现线拍| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日韩中文字幕在线亚洲一区| 成人影院久久久久久影院| 韩国三级香港三级日本三级| 国产不卡在线观看| 精品国产三级a∨在线观看| 免费毛片播放| 精品视频在线观看一区二区| 午夜激情视频在线播放| 黄视频网站免费观看| 亚州视频一区二区| 日韩欧美一及在线播放| 天天色成人| a级黄色毛片免费播放视频| 欧美a级成人淫片免费看| 日韩avdvd| 台湾毛片| 精品视频在线看| 欧美另类videosbestsex视频| 日韩在线观看免费完整版视频| 亚欧视频在线| 99久久精品国产高清一区二区 | 欧美a级片视频| 国产一区二区精品久| 天天做人人爱夜夜爽2020毛片| 一级女人毛片人一女人| 日日夜夜婷婷| 日韩在线观看视频黄| 欧美大片一区| 麻豆系列 在线视频| 久久成人亚洲| 国产不卡高清在线观看视频| 国产麻豆精品hdvideoss| a级精品九九九大片免费看| 欧美激情在线精品video| 欧美大片aaaa一级毛片| 日本特黄特色aa大片免费| 亚洲 激情| 九九干| 一级女性全黄久久生活片| 日韩av东京社区男人的天堂| 欧美激情一区二区三区在线播放| 欧美大片一区| 国产国语在线播放视频| 国产网站免费| 国产不卡在线看| 国产高清视频免费观看| 欧美激情伊人| 一级毛片视频免费| 久久国产一久久高清| 成人高清护士在线播放| 黄色免费三级| 麻豆系列国产剧在线观看| 91麻豆tv| 99久久精品国产国产毛片| 麻豆网站在线看| 青青久热| 精品视频一区二区三区免费| 久久精品大片| 午夜欧美福利| 午夜激情视频在线观看| 欧美18性精品| 日韩av东京社区男人的天堂| 国产韩国精品一区二区三区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产精品123| 99久久精品国产高清一区二区| 国产麻豆精品免费密入口| a级毛片免费观看网站| 91麻豆tv| 国产成人欧美一区二区三区的| 国产综合成人观看在线| 国产成人女人在线视频观看| 国产成a人片在线观看视频| 国产网站免费| 成人免费观看男女羞羞视频 | 日本在线www| 久久国产精品只做精品| 日韩中文字幕在线亚洲一区| 成人免费高清视频| 国产一区国产二区国产三区| 四虎论坛| 国产视频一区在线| 91麻豆国产福利精品| 日韩av东京社区男人的天堂| 成人免费观看男女羞羞视频 | 九九精品久久久久久久久| 你懂的在线观看视频| 亚洲女人国产香蕉久久精品 | 久久国产一区二区| 久久精品大片| 香蕉视频三级| 四虎影视库| 青青久久精品国产免费看| 国产a免费观看| 香蕉视频久久| 青青青草影院 | 日韩在线观看视频黄| 国产a网| 97视频免费在线| 欧美国产日韩久久久| 亚洲精品影院久久久久久| 亚洲第一页乱| 欧美国产日韩在线| 国产精品自拍在线观看| 国产91精品系列在线观看| 精品在线免费播放| 久久成人亚洲| 国产综合成人观看在线| 欧美一级视频免费| 日本免费区| 成人免费观看网欧美片| 国产成人女人在线视频观看| 国产精品免费久久| 亚洲www美色| 精品国产亚一区二区三区| 91麻豆精品国产片在线观看| 日韩一级黄色片| 国产伦精品一区三区视频| 日韩av成人| 日本在线不卡免费视频一区| 亚洲第一页乱| 日韩中文字幕在线观看视频| 日韩中文字幕在线播放| 欧美另类videosbestsex久久| 麻豆系列 在线视频| 韩国妈妈的朋友在线播放| 超级乱淫伦动漫| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日韩中文字幕一区| 九九精品久久久久久久久| 国产网站免费在线观看| 国产一区二区精品久久91| 欧美大片毛片aaa免费看| 精品久久久久久综合网| 午夜在线影院| 久久99这里只有精品国产| 青草国产在线| 欧美a免费| 日韩在线观看视频网站| 国产麻豆精品免费密入口| 日韩avdvd| 青青青草视频在线观看| 欧美激情一区二区三区视频 | 韩国毛片 免费| 韩国毛片免费大片| 一级女性全黄久久生活片| 99久久精品国产片| 日本免费区| 国产视频一区二区在线播放| 亚洲精品影院久久久久久| 久久国产精品自由自在| 99久久网站| 一a一级片| 国产91精品系列在线观看| 日日夜人人澡人人澡人人看免| 亚洲天堂一区二区三区四区| 中文字幕一区二区三区精彩视频 | a级毛片免费观看网站| 国产成+人+综合+亚洲不卡| 国产高清视频免费| 久久精品免视看国产成人2021| 99色视频在线观看| 免费一级片在线观看| 午夜欧美成人久久久久久| 国产激情视频在线观看| 成人免费观看网欧美片| 日韩中文字幕一区| 亚洲 激情| 欧美激情一区二区三区在线| 国产一区二区精品久久| 青青青草影院| 999久久狠狠免费精品| 国产不卡高清在线观看视频| 国产伦理精品| 成人免费一级毛片在线播放视频| 日日日夜夜操| 国产高清在线精品一区a| 麻豆系列国产剧在线观看| 国产一级生活片| 欧美1卡一卡二卡三新区| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 |