繁体   English   中英

PySide,将窗口停靠到任务栏

[英]PySide, Docking windows to taskbar

我正在用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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM