惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CERT Recently Published Vulnerability Notes
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
V
Visual Studio Blog
Stack Overflow Blog
Stack Overflow Blog
aimingoo的专栏
aimingoo的专栏
C
Check Point Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
Tor Project blog
P
Proofpoint News Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Latest news
Latest news
L
LINUX DO - 热门话题
罗磊的独立博客
T
Tenable Blog
The Hacker News
The Hacker News
美团技术团队
N
Netflix TechBlog - Medium
V
Vulnerabilities – Threatpost
阮一峰的网络日志
阮一峰的网络日志
Last Week in AI
Last Week in AI
博客园 - 司徒正美
Jina AI
Jina AI
Cyberwarzone
Cyberwarzone
云风的 BLOG
云风的 BLOG
S
Secure Thoughts
Cloudbric
Cloudbric
S
Security @ Cisco Blogs
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Security Blog
Microsoft Security Blog
Spread Privacy
Spread Privacy
U
Unit 42
雷峰网
雷峰网
C
CXSECURITY Database RSS Feed - CXSecurity.com
Webroot Blog
Webroot Blog
爱范儿
爱范儿
博客园 - 【当耐特】
Know Your Adversary
Know Your Adversary
P
Privacy International News Feed
P
Palo Alto Networks Blog
Google Online Security Blog
Google Online Security Blog
The Last Watchdog
The Last Watchdog
博客园 - 聂微东
Help Net Security
Help Net Security
Hacker News: Ask HN
Hacker News: Ask HN
F
Full Disclosure
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Security Affairs
Project Zero
Project Zero

埃氮幂の命名空间

埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间 埃氮幂の命名空间
埃氮幂の命名空间
2025-01-20 · via 埃氮幂の命名空间

1.setWindowFlags(Qt.WindowType.WindowStayOnTopHint)窗口隐藏

制作了一个可以自动显示的窗口类,实例化后自动显示,无需window.show()。但是,在show()之后又通过setWindowFlags()方法设置窗口置顶时:

PYTHON
from PySide6.QtWidgets import *
from PySide6.QtCore import *
app=QApplication()
class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.show()
        self.setWindowFlags(Qt.WindowType.WindowStaysOnTopHint)
window=MyWindow()
app.exec()

这个窗口刚显示出来就隐藏了。 我想这也是为什么Qt的窗口不会自动显示的原因之一。但是如果一定要在构造函数里面自动显示,而且setWindowFlags()必须放在show()的后面的时候,就会出现这个问题。

当然,可以在设置完之后再显示一次。但是,这样窗口还是会隐藏,在用户看来就是窗口闪了一下。

解决

所以,以后在调用了show()之后就不要用setWindowFlags()来设置窗口置顶了。(经过测试,设置其他的还行,比如说设置无边框就没有这种问题) 改成用window.windowHandle().setFlags(),作用是相同的,但是窗口不会隐藏。

2.window.hasFocus()不能正确判断窗口焦点

其实,window.hasFocus()并不是不能正确判断窗口焦点,它只判断这个窗口内的这个元件是否有焦点。焦点也不是自动变化的,而是要通过setFocus()来转移焦点到当前原件上。当窗口有焦点(窗口被点击,被系统置于所有其他窗口的上方)时,并不会自动调用setFocus()

在窗口的mousePressEvent()中调用setFocus不是一种正确的做法。因为这样确实让hasFocus()返回的值变为True了,但是这将影响到里面元件的焦点。窗口和里面的所有元件中只能有一个有焦点,与窗口与其他窗口的只有一个的焦点不是同一个。

所以,QWidget专门提供了一个函数来判断当前窗口和其他窗口中,只有一个窗口有的那个焦点,在不在窗口上。这个函数就是: python window.isActiveWindow()

当然,对应地,setFocus()函数也是只对当前元件所在窗口内的,如果需要设置窗口的全局焦点,那么方法名字应改为: python window.activateWindow()

3.setWindowIcon()不改变任务栏图标

开发应用程序时,常常需要把窗口的图标改成自己的图标。设置的方法很简单,就是window.setWindowIcon()。 所以写了一个设置图标的测试程序: python from PySide6.QtWidgets import * from PySide6.QtCore import * from PySide6.QtGui import * app=QApplication() window=QWidget() window.setWindowIcon(QPixmap('../icon.png')) window.show() app.exec() 运行效果如图: image 可以看到,窗口左上角图标和任务栏图标悬停后显示的缩略图的左上角图标都被设置了。但是任务栏上的那个图标没有被设置。 这个是Windows系统的一个问题,Windows认为所有的Python程序都是同一个appid,所以所有打开的窗口都显示同意个图标,Python的图标。为了修改appid,我们只能利用ctypes库访问系统dll。 为了防止程序在其他操作系统报错无法执行,这段代码外面要加上一层try...except语句。 在导入库之后紧接着加入这段代码: python try: from ctypes import windll windll.shell32.SetCurrentProcessExplicitAppUserModelID('<your appid>') except ImportError: pass<your appid>替换为一个字符串,建议包含一些有关应用程序的信息,每条信息用.隔开。 最终效果: image