tkinter实现窗口嵌入桌面

在桌面插件例如日历,便签或桌面宠物等等应用,通常希望能够将软件的窗口钉在桌面上,同时又不影响打开的其他窗口(即不是置顶,而是常驻与桌面,即使用win+d也不会将其窗口关闭)。许多桌面美化类软件都有这个功能。

该功能在win10环境下的实现是通过将软件窗口的父窗口设为windows桌面窗口来实现的(所谓桌面实际上也是一个窗口)。平时使用软件时,软件的一些弹窗或子窗口在失焦时并不会被关闭,正是利用了父子窗口的特性。tkinter并没有预设该功能,我们可以通过win32gui来实现。

代码逻辑是:创建tkinter窗口 -> 获取tkinker窗口句柄 -> 获取windows桌面窗口句柄 -> 将tkinter窗口设置为windows桌面的子窗口。在获取windows桌面句柄时有些曲折,因为最上层桌面被藏在几层窗口内,并且底层窗口的命名并不唯一,所以需要进行遍历。

参考:

怎么在桌面上嵌入窗口(使用FindWindow(),FindWindowEx(),EnumChildWindows())_win32gui.findwindowex将窗口置于桌面层-CSDN博客

https://www.cnblogs.com/2018shawn/p/9833276.html

# -*- coding: utf-8 -*-import tkinter as tk
import win32guidef go():#找到第一个WorkerW窗口dwndparent=win32gui.FindWindowEx(None,None,"WorkerW","")dwndviem=False#遍历所有的WorkerW,直至找到具有SHELLDLL_DefView子窗口的那个while(dwndparent):dwndviem=win32gui.FindWindowEx(dwndparent,None,"SHELLDLL_DefView",None)if(dwndviem!=0):breakdwndparent=win32gui.FindWindowEx(None,dwndparent,"WorkerW","")#经实测,有时SHELLDLL_DefView并不在WorkerW下,而是在唯一的Progman窗口下#这和windows是否启用了任务视图(多桌面)有关。在刚刚启动windows时,SHELLDLL_DefView在Progman下。#一旦进入任务视图,SHELLDLL_DefView就进入了WorkerW#因此如果在WorkerW中没有找到SHELLDLL_DefView的话,就再看看Progman中有没有if(dwndparent==0):print('WorkerW not found, change to Progman')dwndparent=win32gui.FindWindow('Progman',None)dwndviem=win32gui.FindWindowEx(dwndparent,None,"SHELLDLL_DefView",None)if(dwndparent==0):print('Progman not found')else:print('Desktop found, starting program')dwdesktopicon=win32gui.FindWindowEx(dwndviem,None,"SysListView32","FolderView");hwnd = win32gui.FindWindow(None,u'First Demo')win32gui.SetParent(hwnd,dwdesktopicon)#设置tkinter窗口属性
root = tk.Tk()
root.title("First Demo")
root.geometry('500x300+100+100')
theLabel = tk.Label(root, text="tkinter窗口!")
theLabel.pack()#窗口启动后100ms运行go()函数
root.after(100,go)#创建窗口
root.mainloop()

此外,如果使用了其他美化桌面的软件,它们会遮盖住桌面的子窗口。可以将美化软件的窗口作为父窗口,也可以实现常驻的功能。要查看窗口,可以用spy++。

TIPS:发现经过SetParent之后tkinter窗口会变得怪怪的,像褪色了一样。并且如果在最开始设置属性时设置了-alpha透明度,整个窗口会直接消失。经过测试,只要把root.attributes()函数放在go()函数最后即可解决该问题,相当于先指定父窗口,再去改变窗口属性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CTF Web】CTFShow web11 Writeup(RCE+PHP+代码审计)

web11 1 阿呆听完自己菜死了&#xff0c;自己呆了。决定修好漏洞&#xff0c;绝对不能让自己再菜死了。 解法 可知 flag 在 config.php。 <?php # flag in config.php include("config.php"); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/system…

Vue3学习-组件之各种传参方式

props // 父界面传子界面 <childrenModu name"123" :getName"getName" /> // 父界面接收子界面数据 function getName(val:string){console.log(val) } // 子界面触发父界面函数 <button click"getName(11)"></button> // 子…

WorldSpace下的合批策略与ScreenSpace有什么区别

1&#xff09;WorldSpace下的合批策略与ScreenSpace有什么区别 2&#xff09;在iOS上用Metal取代OpenGL的多么 3&#xff09;在动画蓝图中将两个或多个动画同时融合到同一个网格 4&#xff09;Mipmap如何限定层级 这是第387篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的…

java面对对象编程-多态

介绍 方法的多态 多态是在继承&#xff0c;重载&#xff0c;重写的基础上实现的 我们可以看看这个代码 package b;public class main_ {public static void main(String[] args) { // graduate granew graduate(); // gra.cry();//这个时候&#xff0c;子类的cry方法就重写…

安全面试中的一个基础问题:你如何在数据库中存储密码?

3分钟讲解。 上周的面试故事 职位&#xff1a;初级安全工程师&#xff0c;刚毕业。 开始面试。 我&#xff1a;“这里你提到对数据安全有很好的理解。你能举例说明哪些方面的数据安全吗&#xff1f;” A&#xff1a;“当然。例如&#xff0c;当我们构建一个系统时&#xff0c;会…

结合Django和Vue.js构建现代Web应用

文章目录 1. 创建Django项目2. 配置Django后端3. 创建Vue.js前端4. 连接Django和Vue.js5. 构建和部署 在现代Web开发中&#xff0c;结合后端框架和前端框架是非常常见的&#xff0c;其中Django作为一种流行的Python后端框架&#xff0c;而Vue.js则是一种灵活强大的前端框架。本…

Spring Boot 中使用 Redis 和 Lua 脚本实现一个延时队列

效率工具 推荐一个程序员的常用工具网站&#xff0c;效率加倍嘎嘎好用&#xff1a;程序员常用工具 云服务器 云服务器限时免费领&#xff1a;轻量服务器2核4G腾讯云&#xff1a;2核2G4M云服务器新老同享99元/年&#xff0c;续费同价阿里云&#xff1a;2核2G3M的ECS服务器只需99…

仿冒、钓鱼、入侵……警惕邮件安全这些“坑”

为了保证用户对电子邮箱系统的安全使用&#xff0c;保证个人的隐私和财产的安全&#xff0c;我们呼吁每个人都要加强自己的网络安全意识&#xff0c;在对电子邮件进行处理的时候&#xff0c;要对钓鱼邮件进行认真的识别&#xff0c;同时还需要设定一个客户的密码来保证你的邮箱…

【Unity实战】Mirror/UNET中SyncVar和SyncList需要注意的点

SyncVar和SyncList在Unity开发中喜闻乐见&#xff0c;常用于脚本中字段的同步。 但也时常会出现修改了但是没同步的问题。 故本人根据过往踩的坑进行了以下总结&#xff1a; 1. 尽量不要用它进行类的同步 在Unity中&#xff0c;[SyncVar] 特性通常用于同步Unity网络游戏中基…

新旅程:类与对象的魔法课堂

&#x1f389;&#x1f389;&#x1f389;欢迎莅临我的博客空间&#xff0c;我是池央&#xff0c;一个对C和数据结构怀有无限热忱的探索者。&#x1f64c; &#x1f338;&#x1f338;&#x1f338;这里是我分享C/C编程、数据结构应用的乐园✨ &#x1f388;&#x1f388;&…

html+CSS部分基础运用7

项目1 设计简易灯箱画廊 1.实验所需素材 在trees文件夹中提供一个MP3文件和18个JPG文件&#xff0c;设计页面时可以使用。 2.编程实现简易灯箱画廊&#xff0c;鼠标单击任一个图像超链接&#xff0c;在底部浮动框架中显示大图像&#xff0c;效果如图4-1所示的页面。 图4-1 简…

如果jupyter notebook不能实现网页自动跳转,参考下面的链接

一招搞定Jupyter-notebook命令行打开之后不能自动跳转浏览器_一招搞定jupter notebook命令行打开之后-CSDN博客

使用大模型做应用的一些问题

使用了一段时间的大模型应用&#xff0c;遇到一些问题&#xff0c;分享给大家。 使用大模型的基本情况 使用了下面三种大模型&#xff1a; 百度 ERNIE-3 kimi 大模型 chatGPT3.5 使用的大模型应用架构&#xff1a; langchainlangchain RAGlangchain Agentvector 数据…

Echarts图表库推荐以及使用Echarts实现饼图端头弧形效果

推荐Echarts图表库官方链接http://www.ppchart.com/#/ 下面是一段实现饼图端头弧形效果的Echarts代码 虽然有了上面的图表库&#xff0c;里面案例也挺多&#xff0c;但是就是没找到我想要的这种效果&#xff0c;索性就手写了一个 下面代码可以直接去我上面的图标库运行看效果…

书籍学习|基于SprinBoot+vue的书籍学习平台(源码+数据库+文档)

书籍学习平台 目录 基于SprinBootvue的书籍学习平台 一、前言 二、系统设计 三、系统功能设计 1平台功能模块 2后台功能模块 5.2.1管理员功能模块 5.2.2用户功能模块 5.2.3作者功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …

工程机械比例阀电流采集方案——IPEhub2与IPEmotion APP

自从国家实施一带一路和新基建计划以来&#xff0c;工程机械的需求量呈现出快速增长的趋势。而关于工程机械&#xff0c;其比例阀的控制问题不容忽视。比例阀是一种新型的液压控制装置——在普通压力阀、流量阀和方向阀上&#xff0c;用比例电磁铁替代原有的控制部分&#xff0…

如何使用Cloudways搭建WordPress网站

如今&#xff0c;搭建网站已经变得非常简单&#xff0c;这主要得益于开源的CMS建站系统的兴起。即使是不懂编程的人也能轻松搭建自己的网站&#xff0c;这些CMS系统提供了丰富的主题模板和插件&#xff0c;使用户可以通过简单的拖放和配置操作来建立自己的网站。 WordPress是目…

[前端] 空值合并运算符(??)原理(笔记)

以如下代码为例 const avatar computed(() > props.user.avatar ?? fallbackAvatar)该运算符的工作原理是&#xff0c;如果左侧的表达式props.user.avatar的值为null或undefined&#xff0c;那么它会返回右侧的fallbackAvatar。然而&#xff0c;如果props.user.avatar的…

大语言模型实战——搭建纯本地迷你版RAG

1. 概念 RAG&#xff08;Retrieval Augmented Generation&#xff09;检索增强生成&#xff0c;它结合了搜索技术和大语言模型的提示词功能&#xff0c;以搜索算法找到的信息作为背景上下文&#xff0c;来辅助大语言模型&#xff08;Large Language Model, LLM&#xff09;生成…

Oracle数据库操作问题汇总

一、简介 Oracle Database&#xff0c;又名Oracle RDBMS&#xff0c;或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统&#xff0c;系统可移植性好、使用方便、功能强&…