2015-01-18 2 views
1

PyQt4를 사용하고 있습니다. 창을 최소화하고 최대화 할 수는 있지만 작업 표시 줄 아이콘을 클릭하여 최소화 할 수는 없습니다.작업 표시 줄의 클릭을 감지하는 방법은 무엇입니까?

프로그램은 py2exe에 의해 컴파일되고 작업 표시 줄에 "python.exe"로 표시됩니다. 클릭 이벤트를 어떻게 잡을 수 있습니까?

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