日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

如何使用Python做個自定義動態(tài)壁紙

瀏覽:14日期:2022-08-06 17:26:59
目錄使用Python做個自定義動態(tài)壁紙一、核心功能設計二、實現(xiàn)步驟1. UI排版布局設計2. 視頻加載預覽3. 動態(tài)壁紙功能實現(xiàn)4. 關(guān)閉動態(tài)壁紙使用Python做個自定義動態(tài)壁紙

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

如何使用Python做個自定義動態(tài)壁紙接我

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

一、核心功能設計

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

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

UI排版布局設計,確認動態(tài)壁紙功能設計 加載視頻,對視頻進行預覽讀取,保存視頻路徑等 動態(tài)壁紙功能實現(xiàn)應用,獲取桌面句柄,輪播加載視頻 關(guān)閉動態(tài)壁紙,在線壁紙資源獲取等二、實現(xiàn)步驟

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

import osimport sysfrom subprocess import callfrom threading import Threadfrom time import sleepimport cv2from PyQt5 import QtCore, QtWidgetsfrom PyQt5.QtCore import Qt, QTimerfrom PyQt5.QtGui import QImage, QPixmap, QIconfrom PyQt5.QtWidgets import QGridLayout, QPushButton, QMainWindow, QFileDialog, QLabel, QSystemTrayIcon, QAction, QMenu, QMessageBoxfrom os import path as pathq1. UI排版布局設計

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

# author: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) # 設置左側(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) # 設置關(guān)閉按鈕的大小 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', '關(guān)閉壁紙')) self.pushButton_4.setText(_translate('MainWindow', '在線資源'))

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

如何使用Python做個自定義動態(tài)壁紙

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

2. 視頻加載預覽

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

讀取視頻:

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

# author:Dragon少年def openmp4(self): try:global pathpath, filetype = QFileDialog.getOpenFileName(None, '選擇文件', ’.’, '視頻文件(*.AVI;*.mov;*.rmvb;*.rm;*.FLV;*.mp4;*.3GP)') # ;;All Files (*)if path == '': # 未選擇文件 returnself.slotStart()t = Thread(target=self.Stop)t.start() # 啟動線程,即讓線程開始執(zhí)行 except Exception as e:print (e)

視頻流讀取播放:

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

# author: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: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.frameself.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)視頻讀取加載,并且進行視頻預覽了,效果如下:

如何使用Python做個自定義動態(tài)壁紙

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

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

獲取桌面句柄:

# author: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: continuehView = win32gui.FindWindowEx(hwnd_WorkW, None, 'SHELLDLL_DefView', None)# print(’hwmd_hView: ’, hView)if not hView: continueh = 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)建一個類,對窗體進行繼承,進行視頻流加載讀取播放。核心代碼如下:

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

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)壁紙加載應用功能了,效果如下:

如何使用Python做個自定義動態(tài)壁紙

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

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

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

效果如下:

如何使用Python做個自定義動態(tài)壁紙

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

到此這篇關(guān)于使用Python做個自定義動態(tài)壁紙的文章就介紹到這了,更多相關(guān)Python做動態(tài)壁紙內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产情侣一区在线| 黄色日韩在线| 性色av一区二区怡红| 天堂√中文最新版在线| 国产精品欧美日韩一区| 视频一区中文字幕| 一区在线免费| 久久精品成人| 亚洲国产福利| 国产美女久久| 青青草国产成人99久久| 日日夜夜免费精品视频| 天堂av在线一区| 红桃视频亚洲| 伊人成人网在线看| 亚洲欧美伊人| 亚洲性视频h| 国产综合欧美| 91精品电影| 久久精品国产www456c0m| 国产欧美二区| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲精品成人| 亚洲视频国产| 视频一区二区三区入口| 亚洲一区区二区| 日韩中文字幕区一区有砖一区| 91精品99| 美女黄网久久| 日韩精品一二三四| 在线看片日韩| 亚洲免费毛片| 日韩区欧美区| 日精品一区二区三区| 日韩国产欧美在线视频| 亚洲精品一级二级三级| 日韩国产一区二| 国产精品对白久久久久粗| 国产精品一区二区免费福利视频 | 久久不见久久见免费视频7| 国产精品尤物| 日韩精品一卡| 久久亚洲风情| 久久亚洲精精品中文字幕| 91欧美国产| 日韩三区免费| 久久xxxx精品视频| 丝袜亚洲另类欧美| 亚洲精品看片| 精品一区二区三区中文字幕在线| 福利精品在线| 福利在线免费视频| 欧美aa一级| 在线看片不卡| 欧美日韩视频免费看| 日韩不卡一区| 国产精品人人爽人人做我的可爱| 日韩精品第一| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 在线看片福利| 日韩av一级| 亚洲影视一区| 麻豆视频观看网址久久| 91视频一区| 欧美日韩精品一本二本三本| 日本在线成人| 91亚洲一区| 99re国产精品| 国产精品一区二区三区av麻| 日本国产精品| 亚洲a成人v| 日本久久黄色| 国产精品美女| 精品国产乱码久久久久久樱花| 欧美~级网站不卡| 免费的成人av| 久久精品一本| 亚洲一区黄色| 麻豆国产91在线播放| 亚洲调教视频在线观看| 中文字幕成人| 91亚洲成人| 中文字幕免费精品| 日韩一区亚洲二区| 97精品资源在线观看| 99久久久久| 在线手机中文字幕| 天堂俺去俺来也www久久婷婷| 久久影院资源站| 亚洲综合不卡| 欧美激情久久久久久久久久久| 中文字幕亚洲影视| 日韩欧美一区二区三区免费看| 国产精品一区二区精品 | 国产欧美三级| 久久精品国内一区二区三区水蜜桃| 亚洲精选久久| 久久久一本精品| 欧美在线91| 激情五月综合| 精品视频99| 日本久久二区| 日韩另类视频| 国产精品www.| 亚洲欧洲国产精品一区| 欧美性感美女一区二区 | 激情国产在线| 日韩国产在线不卡视频| 久久久精品网| 久久影视三级福利片| 中文精品电影| 亚洲二区三区不卡| 国产v日韩v欧美v| 国产精品一页| 亚洲精品影视| 欧美亚洲激情| 国产精品久久久久久久久久10秀 | 国产麻豆综合| 亚洲四虎影院| 精品精品99| 国产探花一区| 婷婷综合国产| 视频精品一区二区| 黄色日韩在线| 激情久久久久久久| 日本久久成人网| av资源亚洲| 国产一区欧美| 桃色av一区二区| 国产精品xvideos88| 国产亚洲欧美日韩在线观看一区二区 | 国产精品一区二区99| 亚洲香蕉久久| 免播放器亚洲一区| 免费人成黄页网站在线一区二区| 日韩在线精品| 国产91在线播放精品| 国产亚洲一区二区三区啪| 四虎在线精品| 日韩一二三区在线观看| 午夜精品免费| 免费观看不卡av| 999久久久免费精品国产| 9999国产精品| 国产在线观看www| 91一区二区| 精品精品久久| 精品久久亚洲| 高清不卡亚洲| 久久久久.com| 亚洲天堂久久| 亚洲网站视频| 免费国产自久久久久三四区久久| 91精品一区国产高清在线gif| 久久精品国产99国产| 国产乱论精品| 久久精品亚洲一区二区| 国产精品亚洲一区二区在线观看| 国产日韩一区二区三区在线播放| 久久国产精品免费一区二区三区| 国产亚洲欧美日韩精品一区二区三区 | 中文字幕av一区二区三区人| 蜜臀精品一区二区三区在线观看| 亚洲最新av| 日韩三级一区| 青草国产精品久久久久久| 蜜臀久久99精品久久久久久9 | 午夜亚洲一区| 国产视频一区三区| 欧美日韩国产综合网| 视频精品一区二区| 日韩av一二三| 水蜜桃精品av一区二区| 黄色av一区| 国产精品天堂蜜av在线播放| 日本国产精品| 日韩av三区| 久久视频一区| 日韩美女精品| 91看片一区| 97精品国产99久久久久久免费| 日韩中文视频| 欧美亚洲人成在线| 不卡av一区二区| 国产日产精品_国产精品毛片| 桃色一区二区| 国产日本精品| 99国产精品自拍| 国内自拍视频一区二区三区| 久久亚洲精品伦理| 成人小电影网站| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产成年精品| 亚洲a成人v| 999精品色在线播放| 国产视频一区二| 久久福利影视| 久久精品一区| 亚洲91网站| 91久久国产|