校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

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

Python做個自定義動態壁紙還可以放視頻

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

前言

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

首先一起來看看最終實現的自定義動態壁紙效果:

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

一、核心功能設計

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

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

  1. UI排版布局設計,確認動態壁紙功能設計
  2. 加載視頻,對視頻進行預覽讀取,保存視頻路徑等
  3. 動態壁紙功能實現應用,獲取桌面句柄,輪播加載視頻
  4. 關閉動態壁紙,在線壁紙資源獲取等

二、實現步驟

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

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排版布局設計

根據動態壁紙所需要的功能,首先進行UI布局設計,我們這次還是使用的pyqt5。主要包含了加載讀取本地視頻、視頻加載預覽、動態壁紙應用、動態壁紙關閉等。核心設計代碼如下:

# 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()  # 創建左側部件的網格布局層
    self.close_widget.setLayout(self.close_layout)  # 設置左側部件布局為網格
    self.left_close = QPushButton("")  # 關閉按鈕
    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)  # 設置關閉按鈕的大小
    self.left_visit.setFixedSize(15, 15)  # 設置按鈕大小
    self.left_mini.setFixedSize(15, 15)  # 設置最小化按鈕大小
    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)  # 設置窗口透明度
    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", "預覽"))
    self.pushButton_2.setText(_translate("MainWindow", "應用"))
    self.pushButton_3.setText(_translate("MainWindow", "關閉壁紙"))
    self.pushButton_4.setText(_translate("MainWindow", "在線資源"))

UI實現效果如下:

 

UI布局設計完成,下面我們開始進行視頻讀取加載、預覽功能實現。

2. 視頻加載預覽

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

讀取視頻:

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

# 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()  # 啟動線程,即讓線程開始執行
    except Exception as e:
        print (e)

視頻流讀取播放:

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

# 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()  # 停止計時器

至此,我們已經可以實現視頻讀取加載,并且進行視頻預覽了,效果如下:

3. 動態壁紙功能實現

實現桌面壁紙替換,我們首先需要獲取桌面句柄找到桌面窗體,覆寫桌面窗體、調用加載的視頻流,播放動態壁紙。

獲取桌面句柄:

# 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

桌面覆寫:

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

# 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文件,接下來我們在“應用”控件上進行事件綁定,直接調用exe執行,實現動態壁紙播放應用功能。核心代碼如下:

# 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

這樣,我們就完成了動態壁紙加載應用功能了,效果如下:

4. 關閉動態壁紙

最后我們再實現下當前動態壁紙播放關閉功能,我們需要對當前桌面視頻播放進行釋放取消。代碼如下:

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

效果如下:

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

今天我們就到這里,明天繼續努力!

 

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

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

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

巨人網絡通訊聲明:本文標題《Python做個自定義動態壁紙還可以放視頻》,本文關鍵詞  Python,做個,自定義,動態,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python做個自定義動態壁紙還可以放視頻》相關的同類信息!
  • 本頁收集關于Python做個自定義動態壁紙還可以放視頻的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲美女免费视频| 成人妖精视频yjsp地址| 一区二区三区欧美激情| 自拍偷自拍亚洲精品播放| 国产欧美日韩麻豆91| 色国产精品一区在线观看| 高清久久久久久| 不卡一区二区在线| 成人黄动漫网站免费app| 成人av在线看| 色综合久久综合网欧美综合网| 91视视频在线直接观看在线看网页在线看| 国产精品一级片| 成人综合在线观看| 94-欧美-setu| 91久久精品网| 欧美一级精品大片| 精品国产自在久精品国产| 日韩免费成人网| 久久精品一区二区三区不卡| 国产欧美一区二区精品秋霞影院| 国产欧美一区二区三区网站| 国产精品久久久久久久久果冻传媒| 中文成人av在线| 亚洲美女视频在线观看| 亚洲成人免费视| 久久电影网电视剧免费观看| 国产传媒日韩欧美成人| 成人免费视频视频在线观看免费| 91蜜桃免费观看视频| 欧美在线视频全部完| 欧美一区三区四区| 国产日韩欧美精品综合| 亚洲激情在线激情| 亚洲精品欧美在线| 日产欧产美韩系列久久99| 美女一区二区三区| 成人a免费在线看| 欧美在线免费观看视频| 欧美变态凌虐bdsm| 国产精品国产三级国产普通话99| 亚洲一区二区三区四区在线观看 | 中文字幕免费不卡| 国产精品国产三级国产aⅴ中文 | 国产目拍亚洲精品99久久精品| 成人欧美一区二区三区白人| 亚洲成人在线网站| 国产精品中文字幕日韩精品| 91网站在线播放| 日韩一区二区三区四区| 国产精品国产三级国产| 日韩中文字幕av电影| 国产高清在线观看免费不卡| 欧美性受xxxx黑人xyx| 久久综合九色综合97婷婷| 亚洲男女一区二区三区| 久久电影国产免费久久电影| 91免费看片在线观看| 精品欧美乱码久久久久久1区2区| 亚洲欧美中日韩| 蜜乳av一区二区| 在线视频国内一区二区| 久久久精品2019中文字幕之3| 亚洲一区二区三区四区的| 国产美女在线精品| 欧美群妇大交群中文字幕| 国产精品丝袜91| 六月丁香综合在线视频| 色婷婷av一区| 国产婷婷色一区二区三区四区| 午夜精品久久久久| 北条麻妃一区二区三区| 日韩欧美视频一区| 一区二区三区四区精品在线视频| 精品一区二区三区日韩| 欧美日韩一区在线| 亚洲色图欧洲色图| 国产乱码字幕精品高清av| 欧美片在线播放| 亚洲精选视频在线| 成人免费毛片a| 久久久欧美精品sm网站| 麻豆精品新av中文字幕| 欧美日韩精品一区二区三区| 亚洲少妇30p| 成人免费av资源| 国产亚洲自拍一区| 精一区二区三区| 3d成人动漫网站| 午夜亚洲福利老司机| 欧美在线综合视频| 依依成人精品视频| 91一区二区在线| 中文字幕在线观看一区| 国产成人在线色| 久久中文字幕电影| 国产在线精品一区二区不卡了| 91精品国产欧美一区二区18| 亚洲国产日韩精品| 在线观看日韩av先锋影音电影院| 亚洲免费观看高清完整版在线观看熊| 成人一区二区在线观看| 久久久一区二区三区捆绑**| 日本亚洲视频在线| 欧美一级片免费看| 蜜桃av一区二区三区| 欧美成人a∨高清免费观看| 久久成人久久鬼色| 久久人人97超碰com| 黄一区二区三区| 久久久久99精品一区| 国产精品中文有码| 国产亚洲成av人在线观看导航| 国产一区二区免费看| 国产亚洲精品bt天堂精选| 国产成人av资源| 国产精品麻豆一区二区| 成人av电影观看| 亚洲免费观看高清| 91国内精品野花午夜精品| 亚洲成人在线免费| 日韩欧美国产一区二区在线播放 | 欧美日韩一区二区电影| 亚洲国产精品麻豆| 欧美一区二区三区免费观看视频 | 成人午夜私人影院| 自拍偷在线精品自拍偷无码专区| 99精品视频一区| 亚洲一卡二卡三卡四卡无卡久久 | 欧美在线免费播放| 亚洲va韩国va欧美va| 日韩免费一区二区| 国产成人精品网址| 中文字幕色av一区二区三区| 色综合天天做天天爱| 婷婷中文字幕一区三区| 精品国产百合女同互慰| 国产91精品在线观看| 一区二区三区高清| 欧美一区二区三区啪啪| 国产黄色91视频| 一片黄亚洲嫩模| 精品久久久久久久久久久久久久久久久 | www.欧美亚洲| 亚洲国产一区二区三区青草影视 | 日韩va亚洲va欧美va久久| 日韩区在线观看| 国产伦精品一区二区三区视频青涩| 亚洲天堂精品视频| 在线电影院国产精品| 狠狠色综合日日| 亚洲欧美日韩在线| 日韩欧美视频一区| av在线综合网| 午夜精品久久久久久久99樱桃| 日韩欧美国产一区二区在线播放| 成人黄色小视频| 日韩电影在线观看电影| 欧美经典一区二区| 欧美一区二区三区精品| jiyouzz国产精品久久| 免费不卡在线视频| 一区二区三区在线免费| 久久综合九色综合97婷婷女人| 欧美网站一区二区| av资源网一区| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲另类色综合网站| 久久久久久久久99精品| 91麻豆精品国产91久久久使用方法| 成人h动漫精品一区二区| 久久国产尿小便嘘嘘| 亚洲一区二区视频在线观看| 欧美国产一区二区在线观看| 日韩网站在线看片你懂的| 色天天综合色天天久久| 懂色一区二区三区免费观看| 久久国产日韩欧美精品| 午夜成人免费电影| 亚洲精品乱码久久久久久| 久久精品欧美一区二区三区不卡 | 国产精品久久久久久久久快鸭| 91精品欧美久久久久久动漫| 99视频精品在线| 国产不卡视频一区二区三区| 麻豆国产91在线播放| 天天色综合成人网| 亚洲精品视频免费观看| 日本一区二区久久| 2020国产精品| 精品久久久久久久久久久久久久久 | 国产精品福利一区二区| 欧美tickling网站挠脚心| 91精品国产入口在线| 7799精品视频| 欧美日韩成人综合天天影院 | 一区二区三区在线视频观看| 国产精品麻豆欧美日韩ww| 久久精品亚洲麻豆av一区二区| 国产精品视频yy9299一区|