2017-01-24 5 views
0

Okay, nicht sicher, was ich hier vermisse. Ich habe eine GUI-App für Arbeit erstellt, die eine Schließen-Schaltfläche enthält. Ich bin in der Lage, die closeEvent Funktion auszuführen, wenn der Benutzer die Schaltfläche zum Schließen des benutzerdefinierten Fensters verwendet. Wenn sie jedoch auf die Schließen-Schaltfläche in der GUI klicken, kann ich nicht den gleichen Effekt erzielen. Unten ist mein Code, der Fehler und ein Bild meiner GUI, das mein Problem zeigt. Vielen Dank im Voraus für die Hilfe. GUI Error at RuntimePYQT4: Kritische Message Box

# -*- coding: utf-8 -*- 

# Form implementation generated from reading ui file 'icMainWin.ui' 
# 
# Created by: PyQt4 UI code generator 4.11.4 
# 
# WARNING! All changes made in this file will be lost! 

from PyQt4 import QtCore, QtGui 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
import icMainWin_rc 
import sys 
import os 
import time 
import os.path as osp 
import ctypes 
from ctypes import wintypes 
import os 


try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 



#setting the path variable for icon 
path = osp.join(osp.dirname(sys.modules[__name__].__file__), 'I:\\Infection Control System Database\images\Malware-icon.png') 
myappid = 'I:\\Infection Control System Database\images\Malware-icon.png' # arbitrary string 
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid) 
lpBuffer = wintypes.LPWSTR() 
AppUserModelID = ctypes.windll.shell32.GetCurrentProcessExplicitAppUserModelID 
AppUserModelID(ctypes.cast(ctypes.byref(lpBuffer), wintypes.LPWSTR)) 
appid = lpBuffer.value 
ctypes.windll.kernel32.LocalFree(lpBuffer) 
if appid is not None: 
    print(appid) 
class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(905, 675) 
     MainWindow.setMinimumSize(QtCore.QSize(905, 675)) 
     MainWindow.setMaximumSize(QtCore.QSize(905, 680)) 
     font = QtGui.QFont() 
     font.setBold(False) 
     font.setWeight(50) 
     MainWindow.setFont(font) 
     icon = QtGui.QIcon() 
     icon.addPixmap(QtGui.QPixmap(_fromUtf8("I:\Infection Control System Database\Program Files\images\ICDatabaseImage.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) 
     MainWindow.setWindowIcon(icon) 

-Code Verkürzte für die Buchung

 self.retranslateUi(MainWindow) 
     QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL(_fromUtf8("triggered()")), self.btnExit.click) 
     QtCore.QObject.connect(self.actionWar_Room, QtCore.SIGNAL(_fromUtf8("triggered()")), self.cmdWarRoom.click) 
     QtCore.QObject.connect(self.actionFlu, QtCore.SIGNAL(_fromUtf8("triggered()")), self.btnFlu.click) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 
     MainWindow.setTabOrder(self.btnExit, self.btnHelp) 
     MainWindow.setTabOrder(self.btnHelp, self.btnRequest) 
     MainWindow.setTabOrder(self.btnRequest, self.btnSOR_IFMC) 
     MainWindow.setTabOrder(self.btnSOR_IFMC, self.btnSOR_IAH) 
     MainWindow.setTabOrder(self.btnSOR_IAH, self.btnSOR_ILH) 
     MainWindow.setTabOrder(self.btnSOR_ILH, self.btnSOR_IMVH) 
     MainWindow.setTabOrder(self.btnSOR_IMVH, self.btnSOR_IFOH) 
     MainWindow.setTabOrder(self.btnSOR_IFOH, self.cmdEmail) 
     MainWindow.setTabOrder(self.cmdEmail, self.cmdHCSBrpt) 
     MainWindow.setTabOrder(self.cmdHCSBrpt, self.cmdWarRoom) 
     MainWindow.setTabOrder(self.cmdWarRoom, self.cmdReview) 
     MainWindow.setTabOrder(self.cmdReview, self.cmdIC_AccessDB) 
     MainWindow.setTabOrder(self.cmdIC_AccessDB, self.btnCaseCAUTI) 
     MainWindow.setTabOrder(self.btnCaseCAUTI, self.btnCaseCLABSI) 
     MainWindow.setTabOrder(self.btnCaseCLABSI, self.btnCaseSSI) 
     MainWindow.setTabOrder(self.btnCaseSSI, self.btnCaseVAP) 
     MainWindow.setTabOrder(self.btnCaseVAP, self.btnCaseLabID) 
     MainWindow.setTabOrder(self.btnCaseLabID, self.btnCaseMDRO) 
     MainWindow.setTabOrder(self.btnCaseMDRO, self.btnHH) 
     MainWindow.setTabOrder(self.btnHH, self.btnNHSN) 
     MainWindow.setTabOrder(self.btnNHSN, self.btnHAI) 
     MainWindow.setTabOrder(self.btnHAI, self.btnPremier) 
     MainWindow.setTabOrder(self.btnPremier, self.btnFlu) 
     MainWindow.setTabOrder(self.btnFlu, self.btnMicrosoft) 
     MainWindow.setTabOrder(self.btnMicrosoft, self.dateEdit) 
     MainWindow.setTabOrder(self.dateEdit, self.timeEdit) 

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(_translate("MainWindow", "Infection Control Database - Landing Page", None)) 
     self.lblWelcome.setText(_translate("MainWindow", "Welcome!", None)) 
     self.dateEdit.setDisplayFormat(_translate("MainWindow", "MMMM dd yyyy", None)) 
     self.btnExit.setStatusTip(_translate("MainWindow", "Exit Database", None)) 
     self.btnExit.setText(_translate("MainWindow", "Exit", None)) 
     self.btnExit.setShortcut(_translate("MainWindow", "Ctrl+Shift+Q", None)) 
     self.btnHelp.setText(_translate("MainWindow", "Help", None)) 
     self.btnRequest.setText(_translate("MainWindow", "Request ", None)) 
     self.grpReportsSOR.setStatusTip(_translate("MainWindow", "SOR Reports", None)) 
     self.grpReportsSOR.setTitle(_translate("MainWindow", "SOR Files", None)) 
     self.btnSOR_IFMC.setText(_translate("MainWindow", "IFMC", None)) 
     self.btnSOR_IAH.setText(_translate("MainWindow", "IAH", None)) 
     self.btnSOR_ILH.setText(_translate("MainWindow", "ILH", None)) 
     self.btnSOR_IMVH.setText(_translate("MainWindow", "IMVH", None)) 
     self.btnSOR_IFOH.setText(_translate("MainWindow", "IFOH", None)) 
     self.grp_EnterCaseData.setTitle(_translate("MainWindow", "Case Data Entry", None)) 
     self.btnCaseCAUTI.setStatusTip(_translate("MainWindow", "Enter CAUTI Case", None)) 
     self.btnCaseCAUTI.setText(_translate("MainWindow", "CAUTI Case", None)) 
     self.btnCaseCLABSI.setStatusTip(_translate("MainWindow", "Enter CLABSI Case ", None)) 
     self.btnCaseCLABSI.setText(_translate("MainWindow", "CLABSI Case", None)) 
     self.btnCaseSSI.setStatusTip(_translate("MainWindow", "Enter SSI Case", None)) 
     self.btnCaseSSI.setText(_translate("MainWindow", "SSI Case", None)) 
     self.btnCaseVAP.setStatusTip(_translate("MainWindow", "Enter VAP Case", None)) 
     self.btnCaseVAP.setText(_translate("MainWindow", "VAP Case", None)) 
     self.btnCaseLabID.setStatusTip(_translate("MainWindow", "Enter LabID Case", None)) 
     self.btnCaseLabID.setText(_translate("MainWindow", "LabID Case", None)) 
     self.btnCaseMDRO.setStatusTip(_translate("MainWindow", "Enter MDRO Cases", None)) 
     self.btnCaseMDRO.setText(_translate("MainWindow", "MDRO", None)) 
     self.cmdEmail.setText(_translate("MainWindow", "Email", None)) 
     self.cmdHCSBrpt.setText(_translate("MainWindow", "HCSB Report", None)) 
     self.cmdWarRoom.setText(_translate("MainWindow", "War Room Report", None)) 
     self.cmdReview.setText(_translate("MainWindow", "Review HAI Data", None)) 
     self.cmdIC_AccessDB.setText(_translate("MainWindow", "2011 IC Access Database", None)) 
     self.label.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-weight:600; color:#aa0000;\">Infection Control Database</span></p></body></html>", None)) 
     self.btnHH.setStatusTip(_translate("MainWindow", "Hand Hygiene Application", None)) 
     self.btnNHSN.setStatusTip(_translate("MainWindow", "NHSN Website", None)) 
     self.btnHAI.setStatusTip(_translate("MainWindow", "HAI Folder", None)) 
     self.btnPremier.setStatusTip(_translate("MainWindow", "Navigate to SafetySurveillor: https://ss.premierinc.com/Setnet/user/Login.po ", None)) 
     self.btnFlu.setStatusTip(_translate("MainWindow", "Flu Reports", None)) 
     self.groupBox.setStatusTip(_translate("MainWindow", "Navigate to Location", None)) 
     self.groupBox.setTitle(_translate("MainWindow", "Navigation ", None)) 
     self.menuFile.setTitle(_translate("MainWindow", "File", None)) 
     self.menuEnd_Processes.setTitle(_translate("MainWindow", "End Processes", None)) 
     self.menuView.setTitle(_translate("MainWindow", "View", None)) 
     self.menuReports.setTitle(_translate("MainWindow", "Reports", None)) 
     self.actionExit.setText(_translate("MainWindow", "Exit", None)) 
     self.actionExit.setShortcut(_translate("MainWindow", "Ctrl+Shift+Q", None)) 
     self.actionTerminate_Excel.setText(_translate("MainWindow", "Terminate Excel", None)) 
     self.actionTerminate_Access.setText(_translate("MainWindow", "Terminate Access", None)) 
     self.actionTerminate_Powerpoint.setText(_translate("MainWindow", "Terminate PowerP", None)) 
     self.actionTerminate_Word.setText(_translate("MainWindow", "Terminate Word", None)) 
     self.actionReset_Citrix.setText(_translate("MainWindow", "Reset Citrix", None)) 
     self.actionReset_Citrix.setStatusTip(_translate("MainWindow", "Reset Citrix Server", None)) 
     self.actionTerminate_Outlook.setText(_translate("MainWindow", "Terminate Outlook", None)) 
     self.actionHCSB.setText(_translate("MainWindow", "HCSB", None)) 
     self.actionWar_Room.setText(_translate("MainWindow", "War Room", None)) 
     self.actionFlu.setText(_translate("MainWindow", "Flu", None)) 

Signal-Ereignis (E-Mail)

 self.cmdEmail.clicked.connect(self.EmailClicked) 

Signal-Ereignis (Exit)

 self.btnExit.clicked.connect(self.ExitClicked) 

Aktion Ereignis (E-Mail)

def EmailClicked(self):os.startfile('C:\\Program Files\Microsoft Office\Office14\OUTLOOK.EXE') 

Event Action (Exit)

def ExitClicked(self): 
     ret = QMessageBox.critical(self, "Critical", 
       'Are you sure you want to exit?', QMessageBox.Ok, QMessageBox.Cancel) 
     ret = msgBox.exec_() 

     if ret == msgBox.Yes: 
      QtCore.QCoreApplication.instance().quit() 

class ControlMainWindow(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(ControlMainWindow, self).__init__(parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 



     self.ui.dateEdit.setDisplayFormat("MMM dd yyyy") 
     self.ui.timeEdit.setDisplayFormat("hh:mm:ss AP") 
     self.updateTime() 
     self.timer = QtCore.QTimer(self) 
     self.timer.timeout.connect(self.updateTime) 
     self.timer.start(1000) 

    def updateTime(self): 
     current = QtCore.QDateTime.currentDateTime() 
     self.ui.dateEdit.setDate(current.date()) 
     self.ui.timeEdit.setTime(current.time()) 


    def closeEvent(self, event): 
     result = QtGui.QMessageBox.critical(self, 
              "Confirm Exit...", 
              "Are you sure you want to exit?", 
              QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) 
     event.ignore() 

     if result == QtGui.QMessageBox.Yes: 
      event.accept() 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    #app.setStyle("Classic") 
    mySW = ControlMainWindow() 
    mySW.show() 
    sys.exit(app.exec_()) 
+1

versuchen, mit: def ExitClicked (Selbst-): self.close() – eyllanesc

Antwort

0

Der Code, den Sie haben einen Fehler, da QMessageBox.critical Bedürfnisse ein QObject Objekt zu übergeben und Ui_MainWindow nicht.

class Ui_MainWindow(object): 
    .... 
    def ExitClicked(self): 
     ret = QMessageBox.critical(self, "Critical", 
       'Are you sure you want to exit?', QMessageBox.Ok, QMessageBox.Cancel) 
     ret = msgBox.exec_() 

     if ret == msgBox.Yes: 
      QtCore.QCoreApplication.instance().quit() 

Außerdem möchten Sie, dass die Schaltfläche Standard und ein Schließen-Schaltfläche das gleiche Verhalten schließen drücken, müssen Sie das Signal anschließen, der die neue Schaltfläche mit der Schließfunktion abgibt, da die Schließfunktion closeEvent ruft .

class Ui_MainWindow(object): 
    .... 


class ControlMainWindow(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(ControlMainWindow, self).__init__(parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     self.ui.btnExit.clicked.connect(self.close) 
     .... 

    def closeEvent(self, event): 
     result = QtGui.QMessageBox.critical(self, 
             "Confirm Exit...", 
             "Are you sure you want to exit?", 
             QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) 
     event.ignore() 

     if result == QtGui.QMessageBox.Yes: 
      event.accept() 

Verbindung löschen: self.btnExit.clicked.connect(self.ExitClicked) und Funktion def ExitClicked(self): ...

+0

Dank @eyllanesc! Definitiv viel einfacher als ich es gemacht habe. –