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
Forum Updated to NodeBB v4.3 + New Features

QMessageBox not working

Scheduled Pinned Locked Moved Unsolved Qt for Python
5 Posts 4 Posters 544 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 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 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