Reputation: 363
I want to show a QMessage.information box after a button has been clicked. I have tried to implement it but It does not seem to be working. Here is a copy of my code and the stack trace. What am I doing wrong, what is the correct way to do this in order to display a message box after the button has been clicked.
# Main Class that holds User Interface Objects
class Ui_MainWindow(object):
# Function for Opening Report Viewer Window From Main Window by clicking View Reports button
def openReportViewer(self):
self.window = QtWidgets.QMainWindow()
self.ui = Ui_reportViewerWindow()
self.ui.setupUi(self.window)
self.window.show()
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setFixedSize(834, 428)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.MinimumExpanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
MainWindow.setFont(font)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
# Sim Card Button
self.simCardButton = QtWidgets.QPushButton(self.centralwidget)
self.simCardButton.setGeometry(QtCore.QRect(30, 200, 211, 30))
self.simCardButton.setToolTip("Select to parse sim card data")
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(14)
self.simCardButton.setFont(font)
self.simCardButton.setObjectName("simCardButton")
# Call Logs Button
self.callLogButton = QtWidgets.QPushButton(self.centralwidget)
self.callLogButton.setGeometry(QtCore.QRect(30, 300, 211, 30))
self.callLogButton.setToolTip("Select to parse call log data")
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(14)
self.callLogButton.setFont(font)
self.callLogButton.setObjectName("callLogButton")
# SMS Button
self.smsButton = QtWidgets.QPushButton(self.centralwidget)
self.smsButton.setGeometry(QtCore.QRect(30, 250, 211, 30))
self.smsButton.setToolTip("Select to parse sms data")
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(14)
self.smsButton.setFont(font)
self.smsButton.setObjectName("smsButton")
# Canonical Address Button
self.canonicalAddressesButton = QtWidgets.QPushButton(self.centralwidget)
self.canonicalAddressesButton.setGeometry(QtCore.QRect(30, 150, 211, 30))
self.canonicalAddressesButton.setToolTip("Select to parse canonical address data")
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(14)
self.canonicalAddressesButton.setFont(font)
self.canonicalAddressesButton.setObjectName("canonicalAddressesButton")
# Main Window Label
self.windowMainLabel = QtWidgets.QLabel(self.centralwidget)
self.windowMainLabel.setGeometry(QtCore.QRect(200, 20, 423, 32))
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(20)
font.setBold(True)
font.setWeight(75)
self.windowMainLabel.setFont(font)
self.windowMainLabel.setAlignment(QtCore.Qt.AlignCenter)
self.windowMainLabel.setObjectName("windowMainLabel")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(30, 110, 291, 20))
self.label.setObjectName("label")
# Combo Box settings
self.ViewDataCB = QtWidgets.QComboBox(self.centralwidget)
self.ViewDataCB.setGeometry(QtCore.QRect(560, 150, 231, 22))
self.ViewDataCB.setToolTip("Choose data report type")
self.ViewDataCB.setObjectName("ViewDataCB")
self.ViewDataCB.addItem("canonical address")
self.ViewDataCB.addItem("sim card")
self.ViewDataCB.addItem("sms")
self.ViewDataCB.addItem("call logs")
self.ViewDataCB.addItem("choice prompt")
self.ViewDataCB.addItem("full report")
# # View Evidence Button
self.viewReportsButton = QtWidgets.QPushButton(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.viewReportsButton.setFont(font)
self.viewReportsButton.setObjectName("viewReportsButton")
# Label for evidence viewer
self.evidenceViewingLabel = QtWidgets.QLabel(self.centralwidget)
self.evidenceViewingLabel.setGeometry(QtCore.QRect(660, 120, 141, 16))
self.evidenceViewingLabel.setObjectName("evidenceViewingLabel")
self.generateReportButton = QtWidgets.QPushButton(self.centralwidget)
self.generateReportButton.setGeometry(QtCore.QRect(650, 320, 141, 31))
self.generateReportButton.setObjectName("generateReportButton")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.actionOpen = QtWidgets.QAction(MainWindow)
self.actionOpen.setObjectName("actionOpen")
self.actionExit = QtWidgets.QAction(MainWindow)
self.actionExit.setObjectName("actionExit")
self.actionOpen_2 = QtWidgets.QAction(MainWindow)
self.actionOpen_2.setObjectName("actionOpen_2")
self.actionExit_2 = QtWidgets.QAction(MainWindow)
self.actionExit_2.setObjectName("actionExit_2")
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
# Function that sets the text on all the UI Buttons
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "SQLite DB Android Parser"))
self.simCardButton.setText(_translate("MainWindow", "Sim Card"))
self.callLogButton.setText(_translate("MainWindow", "Call Logs"))
self.smsButton.setText(_translate("MainWindow", "SMS "))
self.canonicalAddressesButton.setText(_translate("MainWindow", "Canonical Addresses"))
self.windowMainLabel.setText(_translate("MainWindow", "SQLite Android Database Parser"))
self.label.setText(_translate("MainWindow", "Please Choose Data Parsing Option"))
self.ViewDataCB.setItemText(0, _translate("MainWindow", "Choose An Option"))
self.ViewDataCB.setItemText(1, _translate("MainWindow", "Canonical Address Report"))
self.ViewDataCB.setItemText(2, _translate("MainWindow", "Sim Card Report"))
self.ViewDataCB.setItemText(3, _translate("MainWindow", "SMS Report"))
self.ViewDataCB.setItemText(4, _translate("MainWindow", "Call Log Report"))
self.ViewDataCB.setItemText(5, _translate("MainWindow", "Full Evidence Report"))
self.viewReportsButton.setText(_translate("MainWindow", "View Reports"))
self.viewReportsButton.setToolTip("Select to open report viewing window")
self.evidenceViewingLabel.setText(_translate("MainWindow", "Report Generator"))
self.generateReportButton.setText(_translate("MainWindow", "Generate Report"))
self.generateReportButton.setToolTip("Select to generate report")
self.actionOpen.setText(_translate("MainWindow", "Open"))
self.actionExit.setText(_translate("MainWindow", "Exit"))
self.actionOpen_2.setText(_translate("MainWindow", "Open"))
self.actionExit_2.setText(_translate("MainWindow", "Exit"))
# Event Handling Code Section
# Event Handling to open Report Viewer Window
self.viewReportsButton.setGeometry(QtCore.QRect(650, 360, 141, 31))
self.viewReportsButton.clicked.connect(self.openReportViewer)
# Canonical Addresses Button click functionality to parse canonical address data
self.canonicalAddressesButton.clicked.connect(self.select_canonical_data)
# Sim Card Button click functionality to parse sim card data
self.simCardButton.clicked.connect(self.select_sim_data)
# Call Logs Button click functionality to parse call log data
self.callLogButton.clicked.connect(self.select_call_data)
# SMS Button click functionality to parse SMS data
self.smsButton.clicked.connect(self.select_sms_data)
w = QWidget
# Canonical Addresses button function
def select_canonical_data(self):
os.system('CanonicalAddressesParser.py')
canonical_message_box = QMessageBox.information(w, "Message",'Canonical Address Data Generated')
w.show()
# call log button function
def select_call_data(self):
os.system('CallLogParser.py')
# sms button function
def select_sms_data(self):
os.system('SmsParser.py')
# sim card button function
def select_sim_data(self):
os.system('SimCardParser.py')
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Stack Trace
canonical_message_box = QMessageBox.information(w, "Message",'Canonical Address Data Generated')
TypeError: QMessageBox.information(QWidget, str, str, QMessageBox.StandardButtons buttons=QMessageBox.Ok, QMessageBox.StandardButton defaultButton=QMessageBox.NoButton): argument 1 has unexpected type 'PyQt5.QtCore.pyqtWrapperType'
Upvotes: 0
Views: 123
Reputation: 2293
The problem is that you are making an empty widget (w = QWidget
) and then assigning it as the parent of the QMessageBox dialog. This needs to be an instance of your MainWindow class. Something like this:
self.canonicalAddressesButton.clicked.connect(lambda: self.select_canonical_data(MainWindow))
# The lambda is necessary in this circumstance to supply the MainWindow instance to your method
def select_cannonical_data(self):
os.system('CanonicalAddressesParser.py')
canonical_message_box = QMessageBox.information(w, "Message",'Canonical Address Data Generated')
# Your indention is wrong on the above line in your code
This code will open the dialog for you, but this is really not an ideal way to set this up. You seem to be having a lot of trouble with this particular code. I have seen several of your questions about this exact same piece of code. I would recommend that you spend some time with some PyQt5 tutorials to learn more about how to properly use it and maybe research a little more before asking so many questions here. Most of what you have asked can be easily found with very minimal research.
Upvotes: 1