Скрыть окно из панели задач - PullRequest
2 голосов
/ 02 декабря 2010

Я пытаюсь свернуть окно в трей, но кажется, что оно отказывается прятаться от панели задач. Я потратил немного времени и перевел код проблемы к этому. Это не так, поэтому мне интересно, если мне нужно что-то еще, чтобы скрыть свое приложение в трей в Windows 7.

import sys, os
from PyQt4 import uic 
from PyQt4.QtGui import QMainWindow, QApplication

class MyClass(QMainWindow):
    def __init__(self, parent = None):
        QMainWindow.__init__(self, parent)
        self.ui = uic.loadUi(os.path.join("gui", "timeTrackerClientGUI.ui"), self)
    def hideEvent(self, event):
        self.hide()
    def showEvent(self, event):
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    wnd = MyClass()
    wnd.show()
    app.exec_()

Кажется, что значок приложения скрывается, но затем появляется другой значок. Если я нажимаю значок панели задач несколько раз, я могу получить мерцание этих двух значков, выглядит примерно так за доли секунды до того, как скрывается первый:

alt text

Ответы [ 2 ]

3 голосов
/ 07 декабря 2010

Потребовался довольно уродливый хак, чтобы заставить его работать, но вот последний код, если кому-то интересно, ph - это мой модуль для конкретной платформы, вы можете использовать вместо него platform.name или аналогичную функцию:

def hideEvent(self, event):
    self.hide()
    if ph.is_windows():
        self.hidden = True
        self.setWindowFlags(Qt.ToolTip)
def showEvent(self, event):
    if ph.is_windows() and self.hidden:
        self.setWindowFlags(Qt.Window)
        self.hidden = False
    self.show()
1 голос
/ 02 декабря 2010

вызов show / hide в showEvent () / hideEvent () не имеет смысла - эти события являются результатом вызовов show () / hide () (и т. П.), А не триггером. Если вы хотите переключать видимость окна, щелкая значок на панели задач, попробуйте setVisible (! IsVisible ()) на виджете, если вы хотите скрыть окно, когда пользователь нажимает кнопку закрытия окна, попробуйте переопределить closeEvent ():

MyMainWindow::closeEvent( QCloseEvent* e ) {
    hide();
    e->accept();
}

В Python это

def closeEvent(self, event):
    self.hide()
    event.accept()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...