如何隐藏PyQt4 Python应用程序的任务栏图标?

时间:2016-06-19 18:43:12

标签: python pyqt4 qt-designer

我想创建一个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_())

这是它的ui," 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是任务栏上默认图标的样子。我只是不想在那里,正如预期的小部件。

2 个答案:

答案 0 :(得分:3)

试试这个:

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

答案 1 :(得分:0)

我认为this可能是问题:

  

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

     

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

     

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

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