当前位置: 首页 > 知识库问答 >
问题:

PySide,将窗口停靠到任务栏

赵炯
2023-03-14

我正在用PySide和Python2.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。现在,当我点击“Show Window”时,我想在图标的相同位置加载一个停靠到任务栏的Widget/Windows。

如果我会使用几何学,这将永远不会工作,因为有些人的任务栏在顶部,或在屏幕的侧面。

如何用pyside将窗口/小部件停靠到任务栏?

谢谢。

共有1个答案

蒋斯伯
2023-03-14

您应该能够组合使用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)

如您所见,如果 为非零,则任务栏位于顶部或左侧;否则,如果 小于屏幕值,则任务栏在底部或右侧(如果以上均不为真,则不存在任务栏)。

null

null

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

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

 类似资料:
  • 我用pyGtk制作了一扇没有装饰的窗户。该窗口隐藏在任务栏和所有窗口的顶部。在linux上,它可以正常工作,但在MS Windows窗口上,它有时会隐藏在其他窗口下,并且在Windows中的任务栏上总是有“python.exe”。 代表我问题的图片: 如何从任务栏隐藏这个“python.exe”窗口? 我的代码:

  • 我有一个小的Spring Boot API在docker中运行。下面显示的是我用来升级容器的命令。 然后,我有一个停靠的JMeter,我使用下面的命令来启动它 但是所有的测试都失败了,请求没有被发送到API。这就是JMeter的CLI的外观 请求的测试配置: 协议:htttp 服务器:localhost 端口:8080 方法:GET 路径:/api/factorial 完整的bash文件如下所示:

  • 问题内容: 我想让我的程序显示在任务栏中,但仍然没有传统的Windows寄宿生。我该怎么办?我知道 self.overrideredirect(1) ,但是这从任务栏中删除了我的程序。 这适用于Windows 7。 问题答案: 我没有断言这是“正确”的方法,但是请看这是否对您有用:

  • 问题内容: 我正在制作音乐播放器GUI,但无法使其显示在任务栏或Alt- Tab中。我已将overrideredirect()设置为true以删除边框和标题。我也做到了,这样当用户执行“鼠标单击并拖动”操作时,窗口就会移动。这是代码: 有什么办法可以使其至少出现在Alt-Tab中? 问题答案: 经过一些研究,我发现有一种方法可以执行此操作,但是它涉及使用ctypes,并且是Windows的唯一解决

  • 我想删除Windows 10多桌面任务栏上的窗口。对于Windows 8.1,我使用了ITaskbarList::DeleteTab,效果非常好。 对于Windows 10,此方法也将Windows从任务栏中隐藏,但在它之后,我在所有桌面上看到此窗口。我只想在一个桌面上看到这个窗口。 有人知道在Windows 10中从任务栏隐藏窗口并将此窗口保留在一个桌面上的方法吗? 下面你们可以看到,我在“在W

  • 我使用SpringBoot、SpringCloudNetfix和docker来运行微服务。 在非停靠环境中一切正常,但一旦我停靠了eureka服务器和microservice(例如用户服务),我发现用户服务无法注册到eureka服务器。 我可以通过http://{Ubuntu server}:8761/eureka/访问停靠的eureka服务器,或者通过http://{Ubuntu server}