QMessageBox not working
-
hi i am new to PyQt and learning from a tutorial. i am using Qt5. i am not able to get popup window when i click my push button. thank you in advance
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import QMessageBox import sys class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600)``` self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.button = QtWidgets.QPushButton(self.centralwidget) self.button.setGeometry(QtCore.QRect(70, 90, 641, 341)) self.button.setIconSize(QtCore.QSize(40, 40)) self.button.setObjectName("button") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) self.button.clicked.connect(self.show_popup) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Click me")) self.button.setText(_translate("MainWindow", "Press me")) def show_popup(self): msg = QMessageBox() msg.setWindowTitle("Lame") msg.setText("your computer is Lame. Thank you") msg.setIcon(QMessageBox.Warning) msg.standardButtons(QMessageBox.Ok|QMessageBox.Abort|QMessageBox.Ignore) x = msg.exec_() if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())
-
i found it
-
I guess you need to use
msg.show()
. -
I am also working with PyQt5 and trying to integrate QMessageBox in my project.
In my case I built a robot control interface, and I want to trigger popups when something goes wrong (like empty list or error in queue).
But I am not sure if I’m using QMessageBox.warning correctly inside my methods.self.BtSaveToFileEmergency.clicked.connect(self.SaveEmergency) self.BtConveyer.clicked.connect(self.Conveyer) self.SliderTrack.valueChanged.connect(self.move_track) self.BtAddObject.clicked.connect(self.add_from_combo) self.BtDeleteLast.clicked.connect(self.delete_last) self.BtClearList.clicked.connect(self.clear_session) self.BtRunSession.clicked.connect(self.run_session) self.takeCell = [0.6, -0.1, 0.32] self.takeTrack = 1.2 self.cells = { 1:[0.5,-0.05,0.56], 2:[0.38,-0.25,0.32], 3:[0.41,-0.25,0.32], 4:[0.44,-0.25,0.32], 5:[0.35,-0.10,0.32], 6:[0.38,-0.10,0.32], 7:[0.41,-0.10,0.32], 8:[0.44,-0.10,0.32], 9:[0.35, 0.05,0.32],10:[0.38, 0.05,0.32],11:[0.41, 0.05,0.32],12:[0.44, 0.05,0.32], } self.cellTrack = {1:1,2:1,3:1,4:1,5:0.7,6:0.7,7:0.7,8:0.7,9:0.4,10:0.4,11:0.4,12:0.4} self.rejectCell = [0.50, 0.20, 0.32]; self.rejectTrack = 0.9 self.allowed = {'Box1':[1,2,3,4], 'Box2':[5,6,7,8], 'Box3':[9,10,11,12]} self.occupied = {i: False for i in range(1,13)} self.session = [] self.session_model = QtCore.QStringListModel() self.LVSession.setModel(self.session_model) def _refresh_session(self): self.session_model.setStringList([f"{i+1}. {x}" for i,x in enumerate(self.session)]) def add_from_combo(self): if not hasattr(self,'CBObjects'): return cat = self.CBObjects.currentText().strip() if cat in ('Box1','Box2','Box3','Reject'): self.session.append(cat); self._refresh_session(); self.add_log(f"Add: {cat}") def delete_last(self): if self.session: rem = self.session.pop(); self._refresh_session(); self.add_log(f"Delete: {rem}") def clear_session(self): self.session.clear(); self._refresh_session(); self.add_log("Clear list") def _pick_and_place(self, dst_pos, dst_track): up = 0.10 rx, ry, rz = getattr(self,'DEFAULT_RX',0.0), getattr(self,'DEFAULT_RY',0.0), getattr(self,'DEFAULT_RZ',0.0) self.robot.addMoveToPointL([Waypoint([0.5, -0.05, 0.57, rx, ry, rz])]) self.robot.addLinearTrackMove(self.takeTrack) self.robot.addMoveToPointL([Waypoint([*self.takeCell[:2], self.takeCell[2]+up, rx,ry,rz])]) self.robot.addMoveToPointL([Waypoint([*self.takeCell, rx,ry,rz])]) self.robot.addToolState(1) self.robot.addMoveToPointL([Waypoint([*self.takeCell[:2], self.takeCell[2]+up, rx,ry,rz])]) self.robot.addLinearTrackMove(dst_track) self.robot.addMoveToPointL([Waypoint([dst_pos[0], dst_pos[1], dst_pos[2]+up, rx,ry,rz])]) self.robot.addMoveToPointL([Waypoint([*dst_pos, rx,ry,rz])]) self.robot.addToolState(0) # отпустить self.robot.addMoveToPointL([Waypoint([dst_pos[0], dst_pos[1], dst_pos[2]+up, rx,ry,rz])]) self.robot.activateMoveToStart() def _choose_slot(self, cat): for i in self.allowed.get(cat, []): if not self.occupied[i]: self.occupied[i] = True return i return None def run_session(self): if not self.session: QtWidgets.QMessageBox.warning(self,"Error","List is clear") return self.add_log("Start move queue") try: for cat in self.session: if cat == 'Reject': self._pick_and_place(self.rejectCell, self.rejectTrack) else: slot = self._choose_slot(cat) if slot is None: self.add_log(f"There are no free cells for {cat}, pass") continue self._pick_and_place(self.cells[slot], self.cellTrack[slot]) self.robot.play() while self.robot.getActualStateOut() != InterpreterStates.PROGRAM_IS_DONE.value: time.sleep(0.1) self.add_log("Queue complete") except Exception as e: self.add_log(f"Error queue: {e}") QtWidgets.QMessageBox.warning(self,"Error",str(e)) def closeEvent(self, event): self.robot.disengage() self.lamp.setLamp("0001") print("Close event") event.accept() def main(): app = QtWidgets.QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) if __name__ == "__main__": main()
-
I am also working with PyQt5 and trying to integrate QMessageBox in my project.
In my case I built a robot control interface, and I want to trigger popups when something goes wrong (like empty list or error in queue).
But I am not sure if I’m using QMessageBox.warning correctly inside my methods.self.BtSaveToFileEmergency.clicked.connect(self.SaveEmergency) self.BtConveyer.clicked.connect(self.Conveyer) self.SliderTrack.valueChanged.connect(self.move_track) self.BtAddObject.clicked.connect(self.add_from_combo) self.BtDeleteLast.clicked.connect(self.delete_last) self.BtClearList.clicked.connect(self.clear_session) self.BtRunSession.clicked.connect(self.run_session) self.takeCell = [0.6, -0.1, 0.32] self.takeTrack = 1.2 self.cells = { 1:[0.5,-0.05,0.56], 2:[0.38,-0.25,0.32], 3:[0.41,-0.25,0.32], 4:[0.44,-0.25,0.32], 5:[0.35,-0.10,0.32], 6:[0.38,-0.10,0.32], 7:[0.41,-0.10,0.32], 8:[0.44,-0.10,0.32], 9:[0.35, 0.05,0.32],10:[0.38, 0.05,0.32],11:[0.41, 0.05,0.32],12:[0.44, 0.05,0.32], } self.cellTrack = {1:1,2:1,3:1,4:1,5:0.7,6:0.7,7:0.7,8:0.7,9:0.4,10:0.4,11:0.4,12:0.4} self.rejectCell = [0.50, 0.20, 0.32]; self.rejectTrack = 0.9 self.allowed = {'Box1':[1,2,3,4], 'Box2':[5,6,7,8], 'Box3':[9,10,11,12]} self.occupied = {i: False for i in range(1,13)} self.session = [] self.session_model = QtCore.QStringListModel() self.LVSession.setModel(self.session_model) def _refresh_session(self): self.session_model.setStringList([f"{i+1}. {x}" for i,x in enumerate(self.session)]) def add_from_combo(self): if not hasattr(self,'CBObjects'): return cat = self.CBObjects.currentText().strip() if cat in ('Box1','Box2','Box3','Reject'): self.session.append(cat); self._refresh_session(); self.add_log(f"Add: {cat}") def delete_last(self): if self.session: rem = self.session.pop(); self._refresh_session(); self.add_log(f"Delete: {rem}") def clear_session(self): self.session.clear(); self._refresh_session(); self.add_log("Clear list") def _pick_and_place(self, dst_pos, dst_track): up = 0.10 rx, ry, rz = getattr(self,'DEFAULT_RX',0.0), getattr(self,'DEFAULT_RY',0.0), getattr(self,'DEFAULT_RZ',0.0) self.robot.addMoveToPointL([Waypoint([0.5, -0.05, 0.57, rx, ry, rz])]) self.robot.addLinearTrackMove(self.takeTrack) self.robot.addMoveToPointL([Waypoint([*self.takeCell[:2], self.takeCell[2]+up, rx,ry,rz])]) self.robot.addMoveToPointL([Waypoint([*self.takeCell, rx,ry,rz])]) self.robot.addToolState(1) self.robot.addMoveToPointL([Waypoint([*self.takeCell[:2], self.takeCell[2]+up, rx,ry,rz])]) self.robot.addLinearTrackMove(dst_track) self.robot.addMoveToPointL([Waypoint([dst_pos[0], dst_pos[1], dst_pos[2]+up, rx,ry,rz])]) self.robot.addMoveToPointL([Waypoint([*dst_pos, rx,ry,rz])]) self.robot.addToolState(0) # отпустить self.robot.addMoveToPointL([Waypoint([dst_pos[0], dst_pos[1], dst_pos[2]+up, rx,ry,rz])]) self.robot.activateMoveToStart() def _choose_slot(self, cat): for i in self.allowed.get(cat, []): if not self.occupied[i]: self.occupied[i] = True return i return None def run_session(self): if not self.session: QtWidgets.QMessageBox.warning(self,"Error","List is clear") return self.add_log("Start move queue") try: for cat in self.session: if cat == 'Reject': self._pick_and_place(self.rejectCell, self.rejectTrack) else: slot = self._choose_slot(cat) if slot is None: self.add_log(f"There are no free cells for {cat}, pass") continue self._pick_and_place(self.cells[slot], self.cellTrack[slot]) self.robot.play() while self.robot.getActualStateOut() != InterpreterStates.PROGRAM_IS_DONE.value: time.sleep(0.1) self.add_log("Queue complete") except Exception as e: self.add_log(f"Error queue: {e}") QtWidgets.QMessageBox.warning(self,"Error",str(e)) def closeEvent(self, event): self.robot.disengage() self.lamp.setLamp("0001") print("Close event") event.accept() def main(): app = QtWidgets.QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) if __name__ == "__main__": main()