摄像头画面作为电脑桌面背景

1. 创建文件main.pyw,文件内容

import base64
import io
import os
import threading
import tkinter as tk

import cv2
import pystray
import win32api
import win32con
import win32gui
from PIL import Image, ImageTk
from pystray import MenuItem, Menu


class Window:

    def __init__(self):
        self.window = tk.Tk()
        self.window.geometry("320x200")

        self.canvas = tk.Canvas(self.window, width=320, height=180)
        self.canvas.place(x=0, y=0)

        self.label_str = tk.StringVar()
        label = tk.Label(self.window, textvariable=self.label_str)
        label.place(x=0, y=180)

        self.top_label_str = tk.StringVar()
        top_label = tk.Label(self.window, textvariable=self.top_label_str)
        top_label.place(x=100, y=180)

        self.capture = None
        self.delay = 15
        self.show = True
        # 修改壁纸样式
        reg_key = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, "Control Panel\\Desktop", 0, win32con.KEY_SET_VALUE)
        win32api.RegSetValueEx(reg_key, "WallpaperStyle", 0, win32con.REG_SZ, "2")
        win32api.RegSetValueEx(reg_key, "TileWallpaper", 0, win32con.REG_SZ, "0")

    def quit_window(self, icon: pystray.Icon):
        icon.stop()
        self.window.destroy()
        self.show = False

    def show_window(self):
        self.window.deiconify()
        self.show = True

    def on_exit(self):
        self.window.withdraw()

    def set_topmost(self):
        topmost = self.window.attributes("-topmost")
        if topmost:
            self.window.attributes("-topmost", False)
            self.top_label_str.set("")
        else:
        	self.show_window()
            self.window.attributes("-topmost", True)
            self.top_label_str.set("已置顶")

    def init_capture(self):
        try:
            self.label_str.set("摄像头加载中")
            self.capture = cv2.VideoCapture(0)
            self.capture.set(3, 1920)
            self.capture.set(4, 1080)
            self.update_canvas()
            self.label_str.set("摄像头加载完成")
        except:
            self.label_str.set("摄像头加载失败")

    def update_canvas(self):
        ret, frame = self.capture.read()
        if ret:
            file_path = os.getcwd() + "/1.png"
            cv2.imwrite(file_path, frame)
            # 设置壁纸
            win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, file_path, win32con.SPIF_SENDWININICHANGE)
            if self.show:
                img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                img = Image.fromarray(img)
                img = ImageTk.PhotoImage(img.resize((320, 180)))
                self.canvas.imgtk = img
                self.canvas.create_image(0, 0, anchor=tk.NW, image=img)
        # 重复更新画布
        self.window.after(self.delay, self.update_canvas)

    def start(self):
        # 菜单
        menu = (
            MenuItem('显示', self.show_window, default=True),
            Menu.SEPARATOR,
            MenuItem('置顶', self.set_topmost),
            Menu.SEPARATOR,
            MenuItem('退出', self.quit_window))
        image_bytes = base64.b64decode(
            "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")
        image_data = io.BytesIO(image_bytes)
        image = Image.open(image_data)
        icon = pystray.Icon("icon", image, "图标名称", menu)
        threading.Thread(target=icon.run, daemon=True).start()
        threading.Thread(target=self.init_capture, daemon=True).start()

        # 重新定义点击关闭按钮的处理
        self.window.protocol('WM_DELETE_WINDOW', self.on_exit)
        self.window.title('摄像壁纸')
        self.window.mainloop()


if __name__ == '__main__':
    window = Window()
    window.start()

2. 创建文件requirements.txt,文件内容

numpy==1.26.2
opencv-python==4.8.1.78
Pillow==10.1.0
pystray==0.19.5
pywin32==306
six==1.16.0

3. 安装依赖

pip install -r requirements.txt

4. 运行

双击main.pyw

在这里插入图片描述
防火布

github下载代码

git clone https://github.com/weiangongsi/wallpaper-camera.git

从上面第3步开始执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/259019.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes 架构原则和对象设计

什么是 Kubernetes Kubernetes 是谷歌开源的容器集群管理系统 • 基于容器的应用部署、维护和滚动升级; • 负载均衡和服务发现; • 跨机器和跨地区的集群调度; • 自动伸缩; • 无状态服务和有状态服务; • 插件机制…

多表插入操作——后端

场景:当添加一个菜品时,还需要记录菜品的口味信息,因此需要对菜品表(dish)和口味表(dish_flavor)同时进行插入操作。 两个表的字段: 代码思路:由DishController将前端的…

多个文件保存路径不同,如何批量改为相同的文件名称并添加编号

大伙在日常工作中有没有遇到需要修改文件名称吗?平时遇到修改文件名称是如何操作呢,是按比较重统的方法操作,点右键重命名,这个方法是可以使用,如果量少情况可以使用这个方法操作,如果量大,文件…

防火墙-iptables详解

前言:最近的工作中,需要对防火墙进行配置,但是很多地方都是老机器,有的用iptables,有的用firewalld,我写下这篇文章,彻底地了解这两个应用软件的使用方法。在以后的工作中,相信很多人…

程序员必知!开放封闭原则的实战应用与案例分析

开放封闭原则是面向对象设计中的重要原则之一,它要求软件实体(类、模块、函数等)应该对扩展开放,但对修改关闭。这意味着当需要添加新功能时,不应该修改现有的代码,而是应该通过扩展来实现。这可以通过使用…

Linux上随机输出谚语的程序fortune

概要: Linux上有一个随机输出谚语的程序叫fortune 手册对它的描述是:输出一个随机的、充满希望的、有趣的谚语 本篇所用的系统是Ubuntu22.04 一、fortune的安装 sudo apt install fortune-mod 二、fortune的使用 1、示例一 这个谚语是什么意思啊…

机器学习与深度学习傻傻分不清?快来!

导读:本文探讨机器学习和深度学习之间的关键区别和相互联系,目的是为大家提供一个清晰的框架,帮助大家理解这两种技术的特点、应用场景以及选择适当方法的依据。(理论辨析,无实践代码,放心食用)…

CEC2013(python):五种算法(GA、WOA、GWO、DBO、HHO)求解CEC2013(python代码)

一、五种算法简介 1、遗传算法算法GA 2、鲸鱼优化算法WOA 3、灰狼优化算法GWO 4、蜣螂优化算法DBO 5、哈里斯鹰优化算法HHO 二、5种算法求解CEC2013 (1)CEC2013简介 参考文献: [1] Liang J J , Qu B Y , Suganthan P N , et al. Prob…

STM32内部是怎么工作的

STM32是怎么工作的 1 从孩子他妈说起2 早期计算机的组成2.1 五大元件(1)第一个出场的是电容元件(2)第二个出场的是二极管(3)第三个出场的是电阻元件(4)第四个出场的是电感&#xff0…

【论文简述】Learning Depth Estimation for Transparent and Mirror Surfaces(ICCV 2023)

一、论文简述 1. 第一作者:Alex Costanzino 2. 发表年份:2023 3. 发表期刊:ICCV 4. 关键词:深度感知、立体匹配、深度学习、分割、透明物体、镜子 5. 探索动机:透明或镜面(ToM)制成的材料,从建筑物的玻…

RabbitMQ入门指南(三):Java入门示例

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、AMQP协议 1.AMQP 2.Spring AMQP 二、使用Spring AMQP实现对RabbitMQ的消息收发 1.案例准备阶段 2.入门案例(无交换机) 3.任务模型案例(Work Queues&#xff0…

文献速递:生成对抗网络医学影像中的应用——用于生成前列腺MR-only影像治疗剂量规划的合成CT的深度学习模型:多中心研究

文献速递:生成对抗网络医学影像中的应用——用于生成前列腺MR-only影像治疗剂量规划的合成CT的深度学习模型:多中心研究 本周给大家分享文献的主题是生成对抗网络(Generative adversarial networks, GANs)在医学影像中的应用。文…

Chatgpt如何多人使用?如何防止封号?

时下火爆年轻人的AI技术当属于Chatgpt,但他是一把双刃剑,使用它给我们带来便利的同时,也可能会带来隐患,因此我们需要科学使用AI技术。 本文将针对备受关注的Chatgpt如何多人共享使用?如何防止封号,为你带…

python堆-完全二叉树--完全解读

作者:20岁爱吃必胜客(坤制作人),近十年开发经验, 跨域学习者,目前于海外某世界知名高校就读计算机相关专业。荣誉:阿里云博客专家认证、腾讯开发者社区优质创作者,在CTF省赛校赛多次取得好成绩。…

PHP 读取excel输入为HTML

目录 介绍 安装扩展 读取excel文件 输入为html 保存到文件 总结 介绍 以前都是使用phpexcel,不过已经不再更新了, 不过不用担心还可以使用phpspreadsheet来替代它进行操作。 PHPSpreadsheet-在PHP中读取、创建和编写电子表格文档-电子表格引擎。…

SpringBoot代码混淆与反混淆加密工具详解

目录 反编译 混淆 正文 一共就两步,无需源码,直接对ipa文件进行混淆加密 打开要处理的IPA文件 设置签名使用的证书和描述文件 开始ios ipa重签名 简单就是把代码跑一哈,然后我们的代码 .java文件 就被编译成了 .class 文件 反编译 就是…

高精度地图定位模块技术规范

目 录 1 概述................................................................................................... 5 1.1 适用范围...................................................................................... 5 1.2 规范性引用文件....................…

Multimodal Chain-of-Thought Reasoning in Language Models语言模型中的多模态思维链推理

Abstract 大型语言模型 (LLM) 通过利用思维链 (CoT) 提示生成中间推理链作为推断答案的基本原理,在复杂推理方面表现出了令人印象深刻的性能。然而,现有的 CoT 研究主要集中在语言情态上。我们提出了 Multimodal-CoT,它将语言(文本…

MyBatis-Plus(一):根据指定字段更新或插入

根据指定字段更新或插入 1、概述2、实现方式2、总结 1、概述 MyBatis-Plus中提供了一个saveOrUpdate()方法,默认情况下可以根据主键是否存在进行更新或插入操作,但是实际场景中,根据指定字段进行更新或插入的情况也非常多见,今天…

MySQL——表的增删查改

目录 一.Create(创建) 1.单行数据 全列插入 2.多行数据 指定列插入 3.插入否则更新 4. 替换 二.Retrieve(读取) 1. select 列 查询 2.where 条件 3.结果排序 4.筛选分页结果 三.Update (修改)…