• 周五. 4 月 24th, 2026

物嫩软件资讯网

软件资讯来物嫩

桌面太单调?一起用Python做个自定义动态壁纸,竟然还可以放视频!_pyqt5漂亮界面动态背景

admin@wunen

5 月 20, 2025

_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实现效果如下:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/cca0fe687ba74af4afed4fa31c213894.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBARHJhZ29u5bCR5bm0,size_15,color_FFFFFF,t_70,g_se,x_16)  
 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() # 停止计时器


至此,我们已经可以实现视频读取加载,并且进行视频预览了,效果如下:


![在这里插入图片描述](https://img-blog.csdnimg.cn/c41bf90b5e744ded9934f79f40060742.gif)


##### 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


这样,我们就完成了动态壁纸加载应用功能了,效果如下:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/fb215f8c835342618775073b802e5e68.gif)


##### 4. 关闭动态壁纸


最后我们再实现下当前动态壁纸播放关闭功能,我们需要对当前桌面视频播放进行释放取消。代码如下:





author:CSDN-Dragon少年

def close_wall(self):

try:

call(‘taskkill /F /IM play.exe’)

except:

pass


效果如下:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/0761c4a6f0ed4c2ea7fb5c767bd2ae15.gif)


至此,整个自定义动态桌面壁纸功能就全部完成了,下面我们一起运行下看看动态壁纸效果。








**源码及数据已上传,关注文末公众号回复【源码】即可获取完整源码**



> 
> Python往期精彩:
> 
> 
> * [见过仙女蹦迪吗?一起用python做个小仙女代码蹦迪视频]( )
> * [python自制一款炫酷音乐播放器,想听啥随便搜!]( )
> * [斗地主老是输?一起用Python做个AI出牌器,豆子蹭蹭涨!]( )


### 最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~  

给大家准备的学习资料包括但不限于:  

Python 环境、pycharm编辑器/永久激活/翻译插件  

python 零基础视频教程  

Python 界面开发实战教程  

Python 爬虫实战教程  

Python 数据分析实战教程  

python 游戏开发实战教程  

Python 电子书100本  

Python 学习路线规划

![](https://img-blog.csdnimg.cn/d29631674929476f9c3b30f7ff58dff0.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注