python實現動態桌面,代碼開源,軟件可直接使用(不用安裝python)


python實現動態桌面,代碼開源,軟件可直接使用(不用安裝python)

下載鏈接:
軟件:鏈接: https://pan.baidu.com/s/1gm837M8p7PBPF_srIgZjPQ 提取碼: iwnf
源碼:源碼的話私信給我

這個動態壁紙的軟件,主要調用了win32api和pyqt5模塊,下面先看一下效果吧
image

使用到的庫

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. pyqt5的窗口設計
  2. 兩個分開文件的連接
  3. 視頻文件的播放
  4. 調用win32api
  5. 實現在線資源

pyqt5的窗口設計

image

在這里我是先使用qt設計師設計出主界面(main)基本的樣子,再使用css對界面進行美化,代碼如下

'''
` 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.centralwidget.setStyleSheet('''
         QWidget#centralwidget{
         color:white;
         background:#222225;
         border-top:1px solid #222225;
         border-bottom:1px solid #222225;
         border-right:1px solid #222225;
         border-left:1px solid #444444;
         border-top-left-radius:10px;
         border-top-right-radius:10px;
         border-bottom-left-radius:10px;
         border-bottom-right-radius:10px;
         }
        
          ''')
    self.groupBox.setStyleSheet('''
    color:white
    ''')

    MainWindow.setWindowOpacity(0.95)  # 設置窗口透明度
    MainWindow.setAttribute(Qt.WA_TranslucentBackground)
    MainWindow.setWindowFlag(Qt.FramelessWindowHint)  # 隱藏邊框```

兩個分開的文件的鏈接

由於pyqt5的多開比較麻煩,所以我們分開了兩個文件
image
由於時間比較匆忙,所以鏈接他們的只有一個文件和幾段代碼

        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
            try:
                os.system('start play.exe')
                pass
            except Exception as e:
                print (e)

調用win32api

在這里十分感謝B站up主“我ID變綠了”,win32api的調用是他所提供的,代碼如下:
image

    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)
        print('hwmd_workw: ', hwnd_WorkW)
        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)
        print('h_1: ',h)
        while h:
            win32gui.SendMessage(h, 0x0010, 0, 0)  # WM_CLOSE
            h = win32gui.FindWindowEx(None, hwnd_WorkW, "WorkerW", None)
            print(h)
        break
    return hwnd

視頻文件的播放

在視頻播放方面我最先是使用C寫了一個播放器,但后來發現用python的cv2比較快,所以我使用了cv2,代碼如下
image

        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)


    def Stop(self):
        """ Slot function to stop the programme
            """
        sleep(30)
        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)

    def slotStart(self):
        """ Slot function to start the progamme
            """
        videoName = path
        if videoName != "":  # “”為用戶取消
            self.cap = cv2.VideoCapture(videoName)
            self.timer_camera.start(50)
            self.timer_camera.timeout.connect(self.openFrame)



    def openFrame(self):
        """ Slot function to capture frame and process it
            """

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

在線資源調用火螢的網頁,也算是白嫖了吧

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM