I want to create a windows desktop widget. I will create a custom UI for the widget in Qt Designer and add functionality using Python. But, I do not want the application to have an icon on the taskbar at all. How should I modify my code and make my application (and its instances or other similar applications) to have no task bar footprint?
How can I hide the taskbar icon on windows? Here is an example code:
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_())
and this is its 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>
Edit: Here is how default icon looks like on the taskbar. I just do not want it there, as expected from a widget.
Press and hold or right-click any empty space on the taskbar and select Taskbar settings. Under Taskbar corner icons: Select On for any icons you want to see on the taskbar. Select Off for any icons you don't want to see on the taskbar.
Hide taskbar icons manuallyRight-click on any empty space on the taskbar and select or tap Taskbar settings. Go to Taskbar items. Select the items you want to hide from the taskbar and toggle the button Off.
Try this:
from PyQt4 import QtCore
...
class Main(QMainWindow, Ui_MainWindow):
def __init__(self, ):
super(Main, self).__init__()
self.setWindowFlags(QtCore.Qt.Tool) #This
I think this may be the problem:
In Windows 7, the taskbar is not for "Application Windows" per se, it's for "Application User Models". For example, if you have several different instances of your application running, and each instance has its own icon, then they will all be grouped under a single taskbar icon. Windows uses various heuristics to decide whether different instances should be grouped or not, and in this case it decided that everything hosted by Pythonw.exe should be grouped under the icon for Pythonw.exe.
The correct solution is for Pythonw.exe to tell Windows that it is merely hosting other applications. Perhaps a future release of Python will do this. Alternatively, you can add a registry key to tell Windows that Pythonw.exe is just a host rather than an application in its own right. See MSDN documentation for AppUserModelIDs.
Alternatively, you can use a Windows call from Python, to explicitly tell Windows what the correct AppUserModelID is for this process:
import ctypes myappid = 'mycompany.myproduct.subproduct.version' #
arbitrary string
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With