python - PySide,将窗口停靠到任务栏

标签 python qt pyside taskbar qtgui

我正在使用 PySide 和 Python 2.7 编写程序。

class SystemTrayIcon(QtGui.QSystemTrayIcon):
    def __init__(self, parent=None):

        QtGui.QSystemTrayIcon.__init__(self, parent)

        self.setIcon(QtGui.QIcon("myIcon.ico"))

        self.iconMenu = QtGui.QMenu(parent)
        appcalc = self.iconMenu.addAction("ShowWindow")
        appexit = self.iconMenu.addAction("Exit")
        self.setContextMenu(self.iconMenu)

        self.connect(appcalc, QtCore.SIGNAL('triggered()'),self.appCalc)
        self.connect(appexit,QtCore.SIGNAL('triggered()'),self.appExit)

        self.show()

此代码显示一个带有 iconMenu 的工作任务栏图标。现在,当我单击“显示窗口”时,我想加载一个停靠在任务栏上图标同一位置的小部件/窗口。

如果我使用几何图形,这将永远行不通,因为有些人的任务栏位于顶部或屏幕侧面。

如何使用 PySide 将停靠窗口/小部件固定到任务栏?

谢谢。

最佳答案

您应该能够使用 QDesktopWidget.availableGeometry() 的组合和 QDesktopWidget.screenGeometry()计算出任务栏的大小及其方向:

>>> d = qApp.desktop()
>>> d.screenGeometry()
PySide.QtCore.QRect(0, 0, 1600, 900)
>>>>
>>> d.availableGeometry() # taskbar at top
PySide.QtCore.QRect(0, 36, 1600, 864)
>>> d.availableGeometry() # taskbar on left
PySide.QtCore.QRect(36, 0, 1564, 900)
>>>
>>> d.availableGeometry() # taskbar at bottom
PySide.QtCore.QRect(0, 0, 1600, 864)
>>> d.availableGeometry() # taskbar on right
PySide.QtCore.QRect(0, 0, 1564, 900)

如您所见,如果x()y()非零,则任务栏位于顶部或左侧;否则,如果 width()height() 小于屏幕值,则任务栏位于底部或右侧(如果以上都不是)是的,没有任务栏)。

有了这个,您就可以使用 QSystemTrayIcon.geometry()计算窗口相对于任务栏的位置。

PS:

一些窗口管理器具有边距的概念,窗口在初始定位或最大化时无法放置在边距中。此边距通常设置为一或两个像素,以便鼠标始终可以访问桌面边缘。

因此,根据目标平台,您在计算任务栏大小和方向时可能需要考虑这一点。

关于python - PySide,将窗口停靠到任务栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20124264/

相关文章:

linux - VTK 应用程序的可移植性

c++ - 如何将 QPixmap 设置为空

python - QAbstratctTableModel - 删除行

python - 使用 PySide 将 QImage 转为 Numpy 数组

c++ - Qt中的单元测试非返回函数

python - PySide Qt 在叶项中插入行并更新 View

python - 如何将我自己的 Cython 模块导入到 jupyter notebook

python - 有没有适合运行模拟的Python测试框架

python - 准备一个复杂的 python 项目以提交到启动板

python - 如何安装 Vowpal Wabbit python 界面