【无标题】解决PyQt/PySide设置窗口置顶要重新显示使得窗口闪烁的问题

这个问题持续了有段时间,我以“PyQt/PySide 设置窗口置顶 setWindowFlags 窗口闪”等关键词在一篇使用C写的代码解决方案中找到了答案

原文链接QT实现窗口置顶、置顶状态切换、多窗口置顶优先关系 - 知乎 (zhihu.com)

void Widget::on_pushButton_clicked()
{
    if(!istop)
    {
//        Qt::WindowFlags m_flags = windowFlags();
//        setWindowFlags(m_flags | Qt::WindowStaysOnTopHint);
//        show();
        qDebug()<<"always top";

        QWindow* pWin = this->windowHandle();
        pWin->setFlags(Qt::Widget | Qt::WindowStaysOnTopHint);
    }else{
        //Qt::WindowFlags m_flags = windowFlags();
//        setWindowFlags(Qt::Widget);
//        //setWindowFlags(NULL);
//        show();

        QWindow* pWin = this->windowHandle();
        pWin->setFlags(Qt::Widget);
        qDebug()<<"no always top";
    }
    istop=!istop;
}

原文中放弃使用setWindowFlags,而是

        QWindow* pWin = this->windowHandle();
        pWin->setFlags(Qt::Widget)

所以我们在Python中把self.setWindowFlags(Qt.WindowStaysOnTopHint)改为:

m_flags = self.windowFlags()  # 没有这行代码会使窗口的标题栏消失
self.windowHandle().setFlags(m_flags | Qt.WindowType.WindowStaysOnTopHint)

其中self调用的是已实例化的类对象QMainwindow。

综上所述,如果你的代码中使用了下面的方式置顶窗口或设置窗口属性:

self.setWindowFlags(Qt.WindowType.WindowStaysOnTopHint)  # 此方法导致窗口隐藏
self.show()

改成下面的代码即可解决问题

m_flags = self.windowFlags()  # 没有这行代码会使窗口的标题栏消失
self.windowHandle().setFlags(m_flags | Qt.WindowType.WindowStaysOnTopHint)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值