2013-07-30 1 views
0

Mac OSX에서 (command + q) 키를 누르면 My PyQt 애플리케이션이 닫힙니다.Mac OSX에서 pyqt 응용 프로그램에서 command + Q 키를 비활성화하는 방법은 무엇입니까?

(즉) 내 응용 프로그램은 창

에 (Alt + F4) 키를 눌러 유사 close 이벤트를 수신하지만 closing 이벤트의 유형을 해제 할 수 있습니다 어떻게 맥 네이티브 가까운 키보드 바로 가기이다.

다음은 내 qmainwindow가 close 이벤트를 수신하지 않아야하는 샘플 코드입니다.

#! /usr/bin/python 
import sys 
import os 
from PyQt4 import QtGui 
class Notepad(QtGui.QMainWindow): 
    def __init__(self): 
     super(Notepad, self).__init__() 
     self.initUI() 
    def initUI(self): 
     self.setGeometry(300,300,300,300) 
     self.setWindowTitle('Notepad') 
     self.show() 
     self.raise_() 
    #def keyPressEvent(self, keyEvent): 
    # print(keyEvent,'hi') 
    # print('close 0', keyEvent.InputMethod) 
    # if keyEvent.key() != 16777249: 
    #  super().keyPressEvent(keyEvent) 
    # else: 
    #  print(dir(keyEvent)) 
    #  return False 
    def closeEvent(self, event): 
     reply = QtGui.QMessageBox.question(self, 'Message', 
      "Are you sure to quit?", QtGui.QMessageBox.Yes | 
      QtGui.QMessageBox.No, QtGui.QMessageBox.No) 

     if reply == QtGui.QMessageBox.Yes: 
      event.accept() 
     else: 
      event.ignore()   
def main(): 
    app = QtGui.QApplication(sys.argv) 
    notepad = Notepad() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

???

+0

는 qmainwindow 위젯에 대한 keypressevent 기능을 재정 의하여 무시 할 수 없습니다. –

답변

0

QtGui.QApplication :: events() 메서드를 확장하여이 명령 + q close 이벤트를 수신하고 무시하십시오.

아래는 그것을 달성하기위한 샘플 코드입니다.

def main(): 
    app = Application() 
    notepad = Notepad() 
    sys.exit(app.exec_()) 

class Application(QtGui.QApplication): 
    def event(self, event): 
     # Ignore command + q close app keyboard shortcut event in mac 
     if event.type() == QtCore.QEvent.Close and event.spontaneous(): 
      if sys.platform.startswith('darwin'): 
       event.ignore() 
       return False 

덕분에 모두

관련 문제