




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第Python做個自定義動態(tài)壁紙還可以放視頻目錄前言一、核心功能設(shè)計二、實(shí)現(xiàn)步驟1.UI排版布局設(shè)計2.視頻加載預(yù)覽3.動態(tài)壁紙功能實(shí)現(xiàn)4.關(guān)閉動態(tài)壁紙
前言
前段時間,用PyQt5寫了幾篇文章,自己用python做的一款超炫酷音樂播放器、用Python做個個性的動畫掛件讓桌面不單調(diào)、詳細(xì)過程帶你用Python做車牌自動識別系統(tǒng)。今天就繼續(xù)給大家分享一個實(shí)戰(zhàn)案例,帶大家一起用Python的PyQt5開發(fā)一個自定義動態(tài)桌面壁紙,好玩又有趣!
首先一起來看看最終實(shí)現(xiàn)的自定義動態(tài)壁紙效果:
下
面,我們開始介紹這個自定義動態(tài)桌面的制作過程。
一、核心功能設(shè)計
總體來說,我們需要實(shí)現(xiàn)將自己喜歡的視頻轉(zhuǎn)成一個動態(tài)桌面,知識點(diǎn)主要包含了對視頻提取解析,視頻輪播,PyQt5窗體設(shè)置,桌面句柄獲取,自定義動態(tài)桌面壁紙實(shí)現(xiàn)等。
拆解需求,大致可以整理出我們需要分為以下幾步完成:
UI排版布局設(shè)計,確認(rèn)動態(tài)壁紙功能設(shè)計
加載視頻,對視頻進(jìn)行預(yù)覽讀取,保存視頻路徑等
動態(tài)壁紙功能實(shí)現(xiàn)應(yīng)用,獲取桌面句柄,輪播加載視頻
關(guān)閉動態(tài)壁紙,在線壁紙資源獲取等
二、實(shí)現(xiàn)步驟
之前有粉絲反饋說,想自己跟著文章自己敲敲代碼,但是不知道具體需要哪些模塊、包文件,后面我就把所有用到模塊先放出來。
importos
importsys
fromsubprocessimportcall
fromthreadingimportThread
fromtimeimportsleep
importcv2
fromPyQt5importQtCore,QtWidgets
fromPyQt5.QtCoreimportQt,QTimer
fromPyQt5.QtGuiimportQImage,QPixmap,QIcon
fromPyQt5.QtWidgetsimportQGridLayout,QPushButton,QMainWindow,QFileDialog,QLabel,QSystemTrayIcon,\
QAction,QMenu,QMessageBox
fromosimportpathaspathq
1.UI排版布局設(shè)計
根據(jù)動態(tài)壁紙所需要的功能,首先進(jìn)行UI布局設(shè)計,我們這次還是使用的pyqt5。主要包含了加載讀取本地視頻、視頻加載預(yù)覽、動態(tài)壁紙應(yīng)用、動態(tài)壁紙關(guān)閉等。核心設(shè)計代碼如下:
#author:CSDN-Dragon少年
defsetupUi(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("Waitingforvideo...")
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少年
defretranslateUi(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實(shí)現(xiàn)效果如下:
UI布局設(shè)計完成,下面我們開始進(jìn)行視頻讀取加載、預(yù)覽功能實(shí)現(xiàn)。
2.視頻加載預(yù)覽
接來下我們可以根據(jù)自己喜歡的視頻,從本地讀取視頻,并且將視頻預(yù)覽播放顯示。這里視頻演示,博主還是用之前的那篇紫顏小姐姐的跳舞視頻進(jìn)行演示。
讀取視頻:
讀取視頻我們可以
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 制定作業(yè)許可管理制度
- 外匯國外平臺管理制度
- 外來單位安全管理制度
- 巡檢計劃實(shí)施管理制度
- 工廠供電安全管理制度
- 國學(xué)書法教室管理制度
- 北京醫(yī)保制度管理制度
- 臺州工地?fù)P塵管理制度
- 行政組織理論與績效管理的結(jié)合試題及答案
- 公司來客招待管理制度
- 赤峰旅游景點(diǎn)介紹
- (醫(yī)療質(zhì)量及標(biāo)準(zhǔn))JCI美國醫(yī)療機(jī)構(gòu)評審國際聯(lián)合委員會醫(yī)院評審標(biāo)準(zhǔn)第三版
- 東南大學(xué)生物醫(yī)學(xué)工程細(xì)分專業(yè)導(dǎo)師介紹及聯(lián)系方式
- 安全用藥的基本知識有哪些
- GB/T 8923.3-2009涂覆涂料前鋼材表面處理表面清潔度的目視評定第3部分:焊縫、邊緣和其他區(qū)域的表面缺陷的處理等級
- GB/T 3836.31-2021爆炸性環(huán)境第31部分:由防粉塵點(diǎn)燃外殼“t”保護(hù)的設(shè)備
- GB/T 26424-2010森林資源規(guī)劃設(shè)計調(diào)查技術(shù)規(guī)程
- GB/T 17889.1-2012梯子第1部分:術(shù)語、型式和功能尺寸
- 文言文專題復(fù)習(xí) 課件(共26張ppt) 中考語文一輪復(fù)習(xí)
- 光伏發(fā)電項目投標(biāo)書
- 振動分析診斷報告課件
評論
0/150
提交評論