2015-01-18 2 views
1

Я использую PyQt4. Я могу минимизировать и максимизировать окно, но я не могу свести его к минимуму, щелкнув значок на панели задач.Как определить щелчок на панели задач?

Программа скомпилирована py2exe и отображается как «python.exe» на панели задач. Как я могу поймать событие click?

Я использую QWebView. Событие QWebView.event(e) не помогает.

Следующий код предоставляет событие для окна изменения состояния:

... 

class LauncherView(QWebView, object): 
    def __init__(self, QWidget_parent=None): 
     super(LauncherView, self).__init__(QWidget_parent) 
     self.setWindowFlags(Qt.FramelessWindowHint) 
     self.setContextMenuPolicy(Qt.CustomContextMenu) 
     self.resize(801, 601) 

    ... 

    def event(self, e): 
     if e.type() == e.WindowStateChange and self.windowState() & QtCore.Qt.WindowMinimized: # Event if I click the minimize button 
      self.showMinimized() 
     elif e.type() == e.WindowStateChange and self.windowState() == QtCore.Qt.WindowNoState: # Event if I restore the window by clicking on taskbar 
      self.showMaximized() # or showNormal 
     elif ???????: # What event I must catch if I want to minimize window by clicking on taskbar? Now it does not occur... 
      self.showMinimized() 
     return super(QWebView, self).event(e) 

... 


def Main(*args): 
    app = QApplication(args) 
    app.setWindowIcon(QIcon('icon.png')) 
    view = LauncherView() 

    view.setWindowTitle('*** Launcher') 
    frame = view.page().mainFrame() 
    JavaScript = JSCaller(view) 
    events = PyEvents(view, JavaScript) 
    Python = PyCaller(events) 
    html = HTML_data() 
    thisDirPath = 'file:///' + getCurrentPath() + '/Views/' 
    view.setHtml(html, QtCore.QUrl(thisDirPath)) 
     frame.addToJavaScriptWindowObject('Python', Python) 
     frame.evaluateJavaScript("Python.Print('Python context works normally');") 
     view.show() 
    app.exec_() 

if __name__ = '__main__': 
    Main(*sys.argv) 
+0

Вам не нужно ничего делать специальным, если вы не исключаете минимизацию. Не могли бы вы предоставить более подробную информацию или пример кода? –

+0

@three_pineapples Я не знаю, какой пример кода я могу предоставить. Я обновил главный пост. – Broly

ответ

3

Причина вы не в состоянии минимизировать приложение с помощью значка на панели задач, потому что вы перезаписаны существующие флаги окна.

Теперь, как правило, вы делали бы self.setWindowFlags(self.windowFlags()|Qt.FramelessWindowHint), однако я тестировал это, и рамка отображается, когда этого не должно быть. Предположительно, один из существующих флагов противоречит фрейму без фрейма.

Итак, как минимум, в этом случае вы должны иметь эти флаги:

self.setWindowFlags(Qt.Window|Qt.FramelessWindowHint|Qt.WindowMinMaxButtonsHint) 

После того как вы это, вам не нужно никакого специального кода, чтобы минимизировать/развернуть окно, нажав на панели задач значок.

Возможно, вам понадобятся и другие флаги, чтобы получить другое поведение. Вы можете увидеть полный список здесь: http://qt-project.org/doc/qt-4.8/qt.html#WindowType-enum

Смежные вопросы