如何更改 PyQt 或 PySide 中的最小化事件行为?

2024-01-16

我正在开发一个 Qt 应用程序并更改了关闭行为closeEvent虚函数 https://deptinfo-ensip.univ-poitiers.fr/ENS/pyside-docs/PySide/QtGui/QWidget.html?highlight=setparent#PySide.QtGui.PySide.QtGui.QWidget.closeEvent这边走:

class MainWindow(QMainWindow):
    def closeEvent(self, event):
            event.ignore()
            self.hide()
            self.trayicon.showMessage('Running', 'Running in the background.')

这按预期工作。如果我删除event.ignore()应用程序按预期退出,一切都很好。

我也想控制最小化事件,所以当用户单击标题栏上的最小化按钮时,我想移动窗口而不是最小化。 我无法使用hideEvent https://deptinfo-ensip.univ-poitiers.fr/ENS/pyside-docs/PySide/QtGui/QWidget.html?highlight=setparent#PySide.QtGui.PySide.QtGui.QWidget.hideEvent虚函数,因为事件无论如何都会发送到窗口,所以这段代码:

def hideEvent(self, event):
    event.ignore()
    self.move(0,0)

将窗口移动到左上角,然后将其最小化。event.ignore()这里没有效果,所以我尝试使用QtCore.QObject.event https://deptinfo-ensip.univ-poitiers.fr/ENS/pyside-docs/PySide/QtCore/QObject.html?highlight=event#PySide.QtCore.PySide.QtCore.QObject.event这边走:

def event(self, event):
    if event.type() == QEvent.WindowStateChange:
        if self.isMinimized():
            event.ignore()
            self.move(0,0)
            return True
    return False

窗口移动但再次最小化。这有什么问题吗?如何完全覆盖最小化事件?


Try the changeEvent http://doc-snapshot.qt-project.org/4.8/qwidget.html并过滤WindowMinimized http://doc-snapshot.qt-project.org/4.8/qevent.html#Type-enum事件,类似这样的:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from PyQt4 import QtGui, QtCore

class MyWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)

        self.systemTrayIcon = QtGui.QSystemTrayIcon(self)
        self.systemTrayIcon.setIcon(QtGui.QIcon.fromTheme("face-smile"))
        self.systemTrayIcon.setVisible(True)
        self.systemTrayIcon.activated.connect(self.on_systemTrayIcon_activated)

        self.label = QtGui.QLabel(self)
        self.label.setText("Minimize me!")

        self.layoutVertical = QtGui.QVBoxLayout(self)
        self.layoutVertical.addWidget(self.label)

    @QtCore.pyqtSlot(QtGui.QSystemTrayIcon.ActivationReason)
    def on_systemTrayIcon_activated(self, reason):
        if reason == QtGui.QSystemTrayIcon.DoubleClick:
            if self.isHidden():
                self.show()

            else:
                self.hide()

    def changeEvent(self, event):
        if event.type() == QtCore.QEvent.WindowStateChange:
            if self.windowState() & QtCore.Qt.WindowMinimized:
                event.ignore()
                self.close()
                return

        super(MyWindow, self).changeEvent(event)

    def closeEvent(self, event):
        event.ignore()
        self.hide()
        self.systemTrayIcon.showMessage('Running', 'Running in the background.')

if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('MyWindow')

    main = MyWindow()
    main.show()

    sys.exit(app.exec_())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更改 PyQt 或 PySide 中的最小化事件行为? 的相关文章

随机推荐

  • C# 小数舍入不一致吗?

    我一直在与来自 SQL Decimal 38 30 的 C 中的小数精度作斗争 最终我终于将其实现了四舍五入的奇怪效果 我知道我可能忽略了这里显而易见的事情 但我需要一点洞察力 我遇到的问题是 C 无法产生我认为一致的输出 decimal
  • C和C++中return 0有什么意义? [复制]

    这个问题在这里已经有答案了 我需要最简单的答案 我在各个网站上查找了答案 如果程序的输入导致输出为 10 则命令 return 0 是否会强制程序返回值 0 而不是 10 我在 Borland IDE 上编写了简单的 C 程序 没有返回 0
  • 指针是否被视为 C 中通过引用调用的方法?

    在我大学的 C 编程课上 教授和她随后写的书使用了这个术语调用或通过引用传递当提到pointers in C 我的教授认为 通过引用调用函数 的示例 int sum int a int b 我的教授认为 按值调用函数 的一个示例 int s
  • 使用 Envoy 在网络之间建立隧道

    对于混合云用例 我们正在研究 EnvoyProxy 是否适合作为跨本地防火墙移动数据的解决方案 预期的设置如下 应用程序 A 位于本地网络中 没有直接出站或入站 Internet 连接 App B 位于云端 Envoy代理 PC 放置在云端
  • 计算两个值之间的百分比

    我有两列保存数字 我试图计算它们之间的百分比差异并在另一列中显示结果 但结果似乎是错误的 这是有问题的代码 SELECT GenPar ParameterValue AS ClaimType COUNT Submitted ClaimNum
  • 当两个数组有序时,如何进行就地排序?

    我正在研究这个问题 https stackoverflow com questions 4673854 sort with threads 4674052 我的函数原型是 static void Sort byte arr int left
  • JavaScript 中的多语言警报消息

    我有一个 php Web 应用程序多语言 我有一个 php 变量 它可以告诉 Web 应用程序的当前语言 我需要在客户端验证用户输入 并且错误消息会通过 JavaScript 警报显示 例如 如果 php 语言变量是 french 我需要将
  • 应用内购买沙盒 - 地址无效

    我已经在很多应用程序中实现了应用内购买 并在沙盒环境中测试了所有这些应用程序 现在 我正在开发该应用程序的应用程序内购买之一 我昨天测试了该应用程序并且工作正常 但到今天早上 现有的沙箱帐户都没有用于应用程序内测试 我跟着其中一个苹果thr
  • 修改函数内的变量[重复]

    这个问题在这里已经有答案了 假设我有一个内联脚本标记 其代码非常简单 如下所示 function var test This is a simple test function modifyTest s s Modified test te
  • C# 中的 C++ CString 等效项

    是什么C 相当于 MFC 的CString 大概System String 但为了提供更多有用的信息 System String实例是不可变的 连接 子字符串 等实际上创建了新的字符串对象 因此使用字符串实例作为构建输出的缓冲区是一个非常糟
  • Android Studio 2.0 IllegalArgumentException:按钮不存在0

    在Ubuntu上使用android studio 2 0稳定版本和之前的1 5版本 我总是遇到这个异常 有任何想法吗 It appears in the EventLog None
  • 在 Visual C++ 中使用 dllimport

    我已经有几年没有做过任何 Windows 编程了 而且我对如何使用 dllimport 有点生疏了 我有一些类似的事情 extern C declspec dllimport int myFunct int main cout lt
  • 玩笑测试(ReferenceError:google未定义)ReactJS和Google Charts

    我正在使用他们的 CDN 中的 google script 标签 尝试过 body 和 head 我的应用程序中的 Google Chart 工作正常 但是它导致我的 Jest 测试失败 里面的
  • 在 PHP 的 Heredoc 中使用变量

    我是 PHP SQL 的新手 我尝试在定界文档中使用变量 因为我需要输出大量文本 我只包含第一句话 因为它足以说明问题 我的问题是在定界文档中 变量 见下文 data game name and data game owner 不被识别为变
  • XSLT 中的矩阵转置

    我正在尝试从这种输入
  • 计算通过图的路径数

    我正在寻找独特的数量x从特定节点开始的图的长度路径 但是我有一个限制 即在任何路径上没有节点被访问一次以上 For example take the following graph 如果我追求从 5 开始的 3 长度路径的数量 答案是 9
  • 为什么许多语言区分大小写?

    为什么许多语言区分大小写 仅仅是继承问题吗 C 区分大小写 因为 C 是 Java 区分大小写 因为 C 是 等等 还是背后有更务实的原因 我认为您不会得到比 因为该语言的作者认为这样更好 更好的答案 就我个人而言 我认为他们是对的 我不想
  • 如何在 Windows 2003 任务计划程序中为任务创建无限持续时间

    我正在尝试创建无限期的任务 在 Windows Server 2008 上 如果我不指定持续时间 则持续时间被假定为无限 但是 在 Windows Server 2003 上 必须指定持续时间 并且等于或大于间隔 目前 如果要重复很长时间
  • “构建 flutter 工具......”需要很长时间

    由于 Android Studio 的一些问题 我使 flutter 缓存失效 当我尝试时flutter upgrade 我陷入了 构建颤动工具 阶段 flutter upgrade Downloading Dart SDK from Fl
  • 如何更改 PyQt 或 PySide 中的最小化事件行为?

    我正在开发一个 Qt 应用程序并更改了关闭行为closeEvent虚函数 https deptinfo ensip univ poitiers fr ENS pyside docs PySide QtGui QWidget html hig