2012-01-13 2 views
1

창이 변경 될 때 이벤트를 트리거하는 방법을 알아 냈습니다. 그러나 데이터베이스에서 창 정보를 읽을 때 발생합니다. 그리고 데이터베이스에 쓸 때 창이 줄어들 기 때문에 창을 바꿀 때마다 축소 버튼을 클릭하여 내 이벤트를 트리거하고 싶습니다.최소화 버튼 클릭시 pyqt 이벤트 트리거

+0

이 모두가 좋은 예입니다, 그러나 아마 내가 필요 더 설명하기. 하위 윈도우 상태가 변경되면 (최소화 또는 최대화, showEvent 또는 hideEvent) 데이터베이스를 업데이트하여 상태를 기록해야합니다. 이 두 가지 옵션은 창을 최소화하는 데는 잘 작동하지만 쇼 이벤트는 윈도우가 만들어지고 데이터베이스에서 읽는 중 발생하므로 showEvent에서 데이터베이스에 대한 쓰기를 트리거 할 때 데이터베이스 잠금을 얻습니다. 최소화/표시 버튼을 클릭하여 이벤트를 트리거하는 방법을 찾는 것보다 더 나은 일련의 이벤트로이를 파악해야 할 수도 있습니다. – Stephen

+0

최소화 및 복원 변경 이벤트 (Windows가 생성 된 이후에만 발생 함)를 모두 잡아 내 응답을 업데이트했습니다. 그러나 이것이 당신이 달성하고자하는 것을 구현하는 올바른 방법이라고 확신하지는 않습니다. – ekhumoro

답변

5

:

from PyQt4 import QtGui, QtCore 

class Window(QtGui.QWidget): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 

    def changeEvent(self, event): 
     if event.type() == QtCore.QEvent.WindowStateChange: 
      if self.windowState() & QtCore.Qt.WindowMinimized: 
       print('changeEvent: Minimised') 
      elif event.oldState() & QtCore.Qt.WindowMinimized: 
       print('changeEvent: Normal/Maximised/FullScreen') 
     QtGui.QWidget.changeEvent(self, event) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.resize(300, 300) 
    window.show() 
    sys.exit(app.exec_()) 
+0

그것은 OSX (10.8, Qt 5.2)에서도 작동합니다. – glennr

0

QWidget.hideEvent을 사용하고 hideEvent 창이 닫히면 호출되기 때문에 self.isMinimized()을 확인할 수 있습니다. 예 :

스크립트는 아래의 리눅스 및 Windows XP에서 모두 작동 (아마 OSX,하지만 난 그것을 테스트 할 수 없습니다)
#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import sys 
from PyQt4.QtGui import * 


class HookMinimize(QWidget): 
    def hideEvent(self, event): 
     QWidget.hideEvent(self, event) 
     if self.isMinimized(): 
      print "Doing background task" 


if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    window = HookMinimize() 
    window.resize(300, 400) 
    window.show() 
    sys.exit(app.exec_()) 
+1

유감스럽게도이 방법은 Linux에서는 작동하지 않습니다. 또한 Windows에서 이미 최소화 된 창이 닫히면 백그라운드 작업이 다시 실행됩니다 (원하는 작업이 아닐 수도 있습니다). – ekhumoro

+0

@ekhumoro, 감사합니다, 그것에 대해 몰랐습니다. – reclosedev

+0

@reclosedev - 언급되고 완료되었습니다. 감사합니다 – Stephen