【问题标题】:How to hide taskbar icon of a PyQt4 Python application?如何隐藏 PyQt4 Python 应用程序的任务栏图标?
【发布时间】:2016-10-21 00:09:15
【问题描述】:

我想创建一个 Windows 桌面小部件。我将在 Qt Designer 中为小部件创建自定义 UI,并使用 Python 添加功能。但是,我根本不希望应用程序在任务栏上有一个图标。我应该如何修改我的代码并使我的应用程序(及其实例或其他类似应用程序)没有任务栏占用空间?

如何隐藏 Windows 上的任务栏图标?这是一个示例代码:

import sys
from PyQt4 import QtGui
from PyQt4.uic import loadUiType

Ui_MainWindow, QMainWindow = loadUiType('try.ui')

class Main(QMainWindow, Ui_MainWindow):
    def __init__(self, ):
        super(Main, self).__init__()
        self.setupUi(self)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    main = Main()
    main.show()
    sys.exit(app.exec_())

这是它的用户界面,“try.ui”:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>211</width>
    <height>157</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <widget class="QPushButton" name="pushButton">
   <property name="geometry">
    <rect>
     <x>60</x>
     <y>60</y>
     <width>75</width>
     <height>23</height>
    </rect>
   </property>
   <property name="text">
    <string>PushButton</string>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

编辑:Here 是默认图标在任务栏上的样子。正如小部件所期望的那样,我只是不希望它在那里。

【问题讨论】:

  • 图标看起来如何?它说什么?它是默认的pythonwindows图标吗?
  • @MiteshNinja:这只是任务栏上显示的常规默认图标,但我不希望它在那里,也找不到隐藏它的方法。

标签: python pyqt4 qt-designer


【解决方案1】:

试试这个:

from PyQt4 import QtCore
...
class Main(QMainWindow, Ui_MainWindow):
    def __init__(self, ):
        super(Main, self).__init__()
        self.setWindowFlags(QtCore.Qt.Tool)       #This

【讨论】:

  • 谢谢 Stevo,就是这样。不过,我想指出这种方法的一些有趣之处:当我第一次运行第二个实例时,原始实例会消失,如果我运行更多实例并单击桌面,它们都会从屏幕上消失。之后,但是在二次试验中,一切正常。我现在不知道是什么原因造成的,但你的回答解决了我的问题,我接受了。您是否也知道如何同时使应用程序无框架?这更像是一个小部件。
  • 我认为这是一个全新的问题,但快速回答是使用相同的方法:setWindowFlags(QtCore.Qt.FramelessWindowHint)
【解决方案2】:

我认为this可能是问题所在:

在 Windows 7 中,任务栏本身不适用于“应用程序窗口”, 它适用于“应用程序用户模型”。例如,如果您有几个 您的应用程序运行的不同实例,每个实例都有 它自己的图标,然后它们都将被分组在一个任务栏下 图标。 Windows 使用各种启发式方法来决定是否不同 实例是否应该分组,在这种情况下,它决定 由 Pythonw.exe 托管的所有内容都应归为 Pythonw.exe。

正确的解决方案是让 Pythonw.exe 告诉 Windows 它是 仅托管其他应用程序。也许是 Python 的未来版本 会这样做。或者,您可以添加一个注册表项来告诉 Pythonw.exe 只是一个主机而不是应用程序的 Windows 自己的权利。有关 AppUserModelID,请参阅 MSDN 文档。

或者,您可以使用 Python 中的 Windows 调用来显式地 告诉 Windows 这个过程的正确 AppUserModelID 是什么:

import ctypes myappid = 'mycompany.myproduct.subproduct.version' #
arbitrary string
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)

【讨论】:

  • 这不是我要找的。我根本不希望应用程序在任务栏上有一个图标。我应该如何修改我的代码并使我的应用程序(及其实例或其他类似应用程序)没有任务栏占用空间?这更像是我需要的。谢谢你的回复。
猜你喜欢
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 2012-01-04
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
相关资源
最近更新 更多