python窗口怎么显示,如何使用Python在没有窗口的屏幕上显示文本
原来这里有两个完全不同的问题。要在窗口上显示文本,您需要创建一个未装饰的最上面的窗口,并为背景设置色度键。但是,当运行全屏应用程序(如游戏)时,这将不起作用。在全屏应用程序上显示文本的唯一可靠方法是使用Direct3D挂钩。
我还没有写一个Direct3D钩子的例子,但是我会给第一个问题两个不同的解决方案。
解决方案1:Tkinter+pywin32
在本例中,我使用Tkinter完成了大部分工作,并使用win32api防止文本阻止鼠标单击。如果win32api对您不可用,那么您只需删除该部分代码。import Tkinter, win32api, win32con, pywintypes
label = Tkinter.Label(text='Text on the screen', font=('Times New Roman','80'), fg='black', bg='white')
label.master.overrideredirect(True)
label.master.geometry("+250+250")
label.master.lift()
label.master.wm_attributes("-topmost", True)
label.master.wm_attributes("-disabled", True)
label.master.wm_attributes("-transparentcolor", "white")
hWindow = pywintypes.HANDLE(int(label.master.frame(), 16))
# http://msdn.microsoft.com/en-us/library/windows/desktop/ff700543(v=vs.85).aspx
# The WS_EX_TRANSPARENT flag makes events (like mouse clicks) fall through the window.
exStyle = win32con.WS_EX_COMPOSITED | win32con.WS_EX_LAYERED | win32con.WS_EX_NOACTIVATE | win32con.WS_EX_TOPMOST | win32con.WS_EX_TRANSPARENT
win32api.SetWindowLong(hWindow, win32con.GWL_EXSTYLE, exStyle)
label.pack()
label.mainloop()
解决方案2:pywin32
这个例子通过pywin32完成了所有事情。这使得它更复杂,更不易携带,但功能更强大。我在整个代码中都包含了到Windows API相关部分的链接。import win32api, win32con, win32gui, win32ui
def main():
hInstance = win32api.GetModuleHandle()
className = 'MyWindowClassName'
# http://msdn.microsoft.com/en-us/library/windows/desktop/ms633576(v=vs.85).aspx
# win32gui does not support WNDCLASSEX.
wndClass = win32gui.WNDCLASS()
# http://msdn.microsoft.com/en-us/library/windows/desktop/ff729176(v=vs.85).aspx
wndClass.style = win32con.CS_HREDRAW | win32con.CS_VREDRAW
wndClass.lpfnWndProc = wndProc
wndClass.hInstance = hInstance
wndClass.hCursor = win32gui.LoadCursor(None, win32con.IDC_ARROW)
wndClass.hbrBackground = win32gui.GetStockObject(win32con.WHITE_BRUSH)
wndClass.lpszClassName = className
# win32gui does not support RegisterClassEx
wndClassAtom = win32gui.RegisterClass(wndClass)
# http://msdn.microsoft.com/en-us/library/windows/desktop/ff700543(v=vs.85).aspx
# Consider using: WS_EX_COMPOSITED, WS_EX_LAYERED, WS_EX_NOACTIVATE, WS_EX_TOOLWINDOW, WS_EX_TOPMOST, WS_EX_TRANSPARENT
# The WS_EX_TRANSPARENT flag makes events (like mouse clicks) fall through the window.
exStyle = win32con.WS_EX_COMPOSITED | win32con.WS_EX_LAYERED | win32con.WS_EX_NOACTIVATE | win32con.WS_EX_TOPMOST | win32con.WS_EX_TRANSPARENT
# http://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx
# Consider using: WS_DISABLED, WS_POPUP, WS_VISIBLE
style = win32con.WS_DISABLED | win32con.WS_POPUP | win32con.WS_VISIBLE
# http://msdn.microsoft.com/en-us/library/windows/desktop/ms632680(v=vs.85).aspx
hWindow = win32gui.CreateWindowEx(
exStyle,
wndClassAtom,
None, # WindowName
style,
0, # x
0, # y
win32api.GetSystemMetrics(win32con.SM_CXSCREEN), # width
win32api.GetSystemMetrics(win32con.SM_CYSCREEN), # height
None, # hWndParent
None, # hMenu
hInstance,
None # lpParam
)
# http://msdn.microsoft.com/en-us/library/windows/desktop/ms633540(v=vs.85).aspx
win32gui.SetLayeredWindowAttributes(hWindow, 0x00ffffff, 255, win32con.LWA_COLORKEY | win32con.LWA_ALPHA)
# http://msdn.microsoft.com/en-us/library/windows/desktop/dd145167(v=vs.85).aspx
#win32gui.UpdateWindow(hWindow)
# http://msdn.microsoft.com/en-us/library/windows/desktop/ms633545(v=vs.85).aspx
win32gui.SetWindowPos(hWindow, win32con.HWND_TOPMOST, 0, 0, 0, 0,
win32con.SWP_NOACTIVATE | win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_SHOWWINDOW)
# http://msdn.microsoft.com/en-us/library/windows/desktop/ms633548(v=vs.85).aspx
#win32gui.ShowWindow(hWindow, win32con.SW_SHOW)
win32gui.PumpMessages()
def wndProc(hWnd, message, wParam, lParam):
if message == win32con.WM_PAINT:
hdc, paintStruct = win32gui.BeginPaint(hWnd)
dpiScale = win32ui.GetDeviceCaps(hdc, win32con.LOGPIXELSX) / 60.0
fontSize = 80
# http://msdn.microsoft.com/en-us/library/windows/desktop/dd145037(v=vs.85).aspx
lf = win32gui.LOGFONT()
lf.lfFaceName = "Times New Roman"
lf.lfHeight = int(round(dpiScale * fontSize))
#lf.lfWeight = 150
# Use nonantialiased to remove the white edges around the text.
# lf.lfQuality = win32con.NONANTIALIASED_QUALITY
hf = win32gui.CreateFontIndirect(lf)
win32gui.SelectObject(hdc, hf)
rect = win32gui.GetClientRect(hWnd)
# http://msdn.microsoft.com/en-us/library/windows/desktop/dd162498(v=vs.85).aspx
win32gui.DrawText(
hdc,
'Text on the screen',
-1,
rect,
win32con.DT_CENTER | win32con.DT_NOCLIP | win32con.DT_SINGLELINE | win32con.DT_VCENTER
)
win32gui.EndPaint(hWnd, paintStruct)
return 0
elif message == win32con.WM_DESTROY:
print 'Closing the window.'
win32gui.PostQuitMessage(0)
return 0
else:
return win32gui.DefWindowProc(hWnd, message, wParam, lParam)
if __name__ == '__main__':
main()
python窗口怎么显示,如何使用Python在没有窗口的屏幕上显示文本相关推荐
- Python编程——星星: 找一副星星图像,并在屏幕上显示一系列排列整齐的星星
注:本题目为书籍 Python 编程 从入门到实践 练习题 1. 流程图 2. 程序 2.1 屏幕参数 import pygameclass StarSettings:def __init__(sel ...
- python使用循环在屏幕上显示如下图形(显示7行)
使用循环在屏幕上显示如下图形(显示7行) a = 7 out = '' for i in range(1,a+1):out = out + str(i)+" "print(out) ...
- 编写Java程序,在屏幕上显示带标题的窗口,并添加一个按钮。当用户单击按钮时,结束程序。
编写Java程序,在屏幕上显示带标题的窗口,并添加一个按钮.当用户单击按钮时,结束程序. package p3;import java.awt.event.ActionEvent; import ja ...
- 公有iot私有iot架构_玩洋葱Omega IoT设备在OLED屏幕上显示实时血糖
公有iot私有iot架构 I've been playing with IoT stuff on my vacation. Today I'm looking at an Onion Omega. T ...
- Mac版微信取消在锁定屏幕上显示通知的操作方法?
在日常中使用Mac版微信如果不想在锁定屏幕上显示通知,可将该功能关闭.那我们该如何关闭呢?跟小编一起来看看具体教程吧- 微信Mac版客户端(支持查看朋友圈)正式版支持M1芯片 方法步骤如下: 1.首先 ...
- 11、在屏幕上显示文本
文章目录 01.显卡与显示存 02.准备文本模式下的显存 03.字符编码和显示属性 04.文本模式下的现显存属性 05.MOV指令的形式和机器码 06.列表文件的创建与使用 07.汇编程序中使用标号 ...
- Linux下使用tee既在屏幕上显示输出,又把输出写进文件
Linux下的tee是一个很好用的工具,可以把重定向屏幕输出到文件的同时在屏幕上显示输出 使用示例如下: command | tee stdout.log 这里有一个需要注意的坑点,上面的命令只是把标 ...
- php柱形图上显示数字怎么改回来,sigmaplot可以在柱状图上显示数值
公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:sigmaplot可以在柱状图上显示数值? 问题详情:sigmaplot可以在柱状图上显示数值?回答:[求助] 柱状图上如何让数值和 ...
- 计算两个数之间所有整数的和_汇编语言:输入2个0–99之间的整数,对其做乘法运算,在屏幕上显示出该乘积对应的二进制和十六进制数...
实验要求: (1)在屏幕提示:"please input the first number(0–99): "后,输入一个0–99之间的整数. 若所输入的数不在此范围内,或输入其它字 ...
- ABAP屏幕上显示LIST的三种方法
屏幕上显示LIST的三种方法 在abap开发中,经常有用户提出list的需求,实现的方法很多,通常用的有以下三种总结一下供大家参考: 1:手工添加-就是根据需要把LIST要显示的内容一条一条加到LIS ...
最新文章
- 单链表逆序生成及逆置的完整实现
- Java程序员总结分布式架构,你又了解多少呢?
- unity发布webgl 触摸控制和鼠标控制冲突问题解决
- 纯CSS实现立方体旋转
- Atom ctrl+atl+b 快捷键修复
- Githug第42关rebase_onto通关秘籍
- MFC开发-树形菜单
- 【LeetCode】Merge Two Sorted Lists(合并两个有序链表)
- 我很生气,帮了不足一个月就离开了
- pb数据窗口显示图片_AkShare股票数据A股市净率
- python+Flask 返回视频并在前端播放
- oracle数据库管理和日常维护,oracle数据库管理与维护
- linux操作系统日志查看,linux 如何查看系统日志
- intel E3 V1 V2 V3 CPU 参数
- 刚体转动的惯性张量和转动惯量的区别和联系
- html鼠标悬停文字变颜色,鼠标悬停,文字颜色逐渐改变是怎样实现的??
- 怎么提取pdf文件中的图片
- 【翻译】混沌网+SkyWalking:为混沌工程提供更好的可观察性
- 兀键和6键怎么判断_如何判断分子或离子中的大π键
- 【华为OD机试真题 python】水仙花素 【2022 Q4 | 100分】
热门文章
- Python 和 C++实现 九九乘法表
- leapmotion 控制面板的启动
- paip.c++ 宏的展开调试.
- paip.提升用户体验---网站程序HTML,JS需要注意的地方
- PAIP.WEB程序网站安全扫描检测工具(桌面程序)总结
- 镜像资源的使用:100倍速度提升不是梦!
- (转)Fintech路上券商究竟做错了什么?漏做了什么?
- 谁说财务软件不能上纯公有云?
- 【图像去噪】基于matlab GUI多种滤波器图像去噪【含Matlab源码 1778期】
- 【优化分类】基于matlab遗传算法优化支持向量机分类(多输入多分类)【含Matlab源码 QF003期】