Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. QMessageBox not working
Qt 6.11 is out! See what's new in the release blog

QMessageBox not working

Scheduled Pinned Locked Moved Unsolved Qt for Python
5 Posts 4 Posters 1.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    RamanSMann
    wrote on last edited by RamanSMann
    #1

    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_())
    
    1 Reply Last reply
    0
    • R Offline
      R Offline
      RamanSMann
      wrote on last edited by
      #2

      i found it

      1 Reply Last reply
      0
      • sierdzioS Offline
        sierdzioS Offline
        sierdzio
        Moderators
        wrote on last edited by
        #3

        I guess you need to use msg.show().

        (Z(:^

        1 Reply Last reply
        0
        • B Offline
          B Offline
          Borbixxx
          wrote on last edited by Borbixxx
          #4

          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()
          
          jsulmJ 1 Reply Last reply
          0
          • B Borbixxx

            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()
            
            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #5

            @Borbixxx What does your post have to do with this topic?
            "But my code is not running as expected" - is not a problem description.

            closeEvent needs to be a method in a class derived from QWidget based class.

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            2

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved