首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PySide,将窗口停靠到任务栏

PySide,将窗口停靠到任务栏
EN

Stack Overflow用户
提问于 2013-11-21 14:56:29
回答 1查看 983关注 0票数 1

我正在用PySide和Python2.7编写一个程序。

代码语言:javascript
复制
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将窗口/小部件停靠到任务栏?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-11-21 18:53:07

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

代码语言:javascript
复制
>>> 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

一些窗口管理人员有这样的概念,即在最初定位或最大化时不能放置窗口。此边距通常设置为一两个像素,以便鼠标始终可以访问桌面的边缘。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20124264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档