2016-06-19 16 views
5

Chcę utworzyć widget pulpitu systemu Windows. Utworzę niestandardowy interfejs użytkownika dla widgetu w Qt Designer i dodaję funkcjonalność za pomocą Pythona. Ale nie chcę, aby aplikacja miała w ogóle ikonę na pasku zadań. W jaki sposób powinienem zmodyfikować mój kod i sprawić, aby moja aplikacja (i jej wystąpienia lub inne podobne aplikacje) nie miała śladu paska zadań?Jak ukryć ikonę paska zadań aplikacji PyQt4 Python?

Jak ukryć ikonę paska zadań w oknach? Oto przykładowy kod:

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_()) 

i to jest jego 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 jest jak domyślna ikona wygląda na pasku zadań. Po prostu nie chcę tego, zgodnie z oczekiwaniami z widgetu.

+0

w jaki sposób wygląd ikony? Co to mówi? Czy jest to domyślna ikona pythonwindows? – oxalorg

+0

@MiteshNinja: To jest zwykła domyślna ikona wyświetlana na pasku zadań, ale nie chcę jej tam i nie mogę znaleźć sposobu na jej ukrycie. – smuti

Odpowiedz

3

Spróbuj tego:

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

Dziękuję Stevo, to jest to. Chcę jednak zauważyć coś śmiesznego w tej metodzie: Kiedy uruchamiam drugą instancję, po raz pierwszy oryginalna instancja znika, jeśli uruchomię kilka kolejnych instancji i kliknę na pulpicie, wszystkie znikną z ekranu. Potem jednak w próbach wtórnych wszystko działa dobrze. Nie wiem, co powoduje to w tym momencie, ale twoja odpowiedź rozwiązuje mój problem i zaakceptowałem to. Czy wiesz również, jak sprawić, by aplikacja nie była pozbawiona ramek w tym samym czasie? To byłoby bardziej jak widget. – smuti

+0

Myślę, że to zupełnie nowe pytanie, ale szybką odpowiedzią byłoby użycie tej samej metody: 'setWindowFlags (QtCore.Qt.FramelessWindowHint)' –

0

myślę this może być problem:

W systemie Windows 7 pasek zadań nie jest dla "aplikacja Windows" per se, To dla aplikacji użytkownika "modele". Na przykład, jeśli masz kilka różnych uruchomionych aplikacji, a każda instancja ma własną własną ikonę , wszystkie zostaną zgrupowane pod pojedynczą ikoną paska zadań: . System Windows używa różnych heurystyk do decydowania, czy różne instancje powinny być zgrupowane, czy nie, iw tym przypadku zdecydował, że wszystko, co hostowane przez Pythonw.exe, powinno być zgrupowane pod ikoną dla Pythonw.exe.

Prawidłowe rozwiązanie polega na tym, że Pythonw.exe informuje Windows, że jest to po prostu hostowanie innych aplikacji. Być może zrobi to przyszłe wydanie Pythona . Ewentualnie można dodać klucz rejestru, aby poinformować system Windows, że program Pythonw.exe jest po prostu hostem, a nie samodzielną aplikacją w wersji . Zobacz dokumentację MSDN dla AppUserModelIDs.

Alternatywnie, można użyć połączenia Windows z Python, jawnie powiedzieć systemu Windows, co poprawne AppUserModelID jest dla tego procesu:

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

To nie jest to, czego szukam. Nie chcę, aby aplikacja miała w ogóle ikonę na pasku zadań. W jaki sposób powinienem zmodyfikować mój kod i sprawić, aby moja aplikacja (i jej wystąpienia lub inne podobne aplikacje) nie miała śladu paska zadań? To bardziej przypomina to, czego potrzebuję. Dziękuję za odpowiedź. – smuti

Powiązane problemy