DEV Community

ZtoloGame
ZtoloGame

Posted on

python - How to display a message box on PyQT4?

Question:
I'd like a MessageBox to display when I click a button on my simple PyQT application. How can I declare two textboxes and have a MessageBox display with the text from both textboxes?

Here's my code far:

import sys
from PyQt4 import QtGui, QtCore

class myWindow(QtGui.QWidget):
def init(self, parent=None):
QtGui.QWidget.init(self, parent)

    #The setGeometry method is used to position the control.
    #Order: X, Y position - Width, Height of control.
    self.setGeometry(300, 300, 500, 350)
    self.setWindowTitle("Sergio's QT Application.")
    self.setWindowIcon(QtGui.QIcon('menuScreenFolderShadow.png'))

    self.setToolTip('<i>Welcome</i> to the <b>first</b> app ever!')
    QtGui.QToolTip.setFont(QtGui.QFont('Helvetica', 12))

    txtFirstName = QtGui.?
    txtLastName = QtGui.?

    btnQuit = QtGui.QPushButton('Exit Application', self)
    btnQuit.setGeometry(340, 300, 150, 35)

    self.connect(btnQuit, QtCore.SIGNAL('clicked()'),
                QtGui.qApp, QtCore.SLOT('quit()'))
Enter fullscreen mode Exit fullscreen mode

app = QtGui.QApplication(sys.argv)
mainForm = myWindow()
mainForm.show()
sys.exit(app.exec_())

Solution 1:

Since such simple code is a common request, I decided to hack something basic together, here you go:

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class AppForm(QMainWindow):
def init(self, parent=None):
QMainWindow.init(self, parent)
self.create_main_frame()

def create_main_frame(self):        
    page = QWidget()        

    self.button = QPushButton('joy', page)
    self.edit1 = QLineEdit()
    self.edit2 = QLineEdit()

    vbox1 = QVBoxLayout()
    vbox1.addWidget(self.edit1)
    vbox1.addWidget(self.edit2)
    vbox1.addWidget(self.button)
    page.setLayout(vbox1)
    self.setCentralWidget(page)

    self.connect(self.button, SIGNAL("clicked()"), self.clicked)

def clicked(self):
    QMessageBox.about(self, "My message box", "Text1 = %s, Text2 = %s" % (
        self.edit1.text(), self.edit2.text()))
Enter fullscreen mode Exit fullscreen mode

if name == "main":
import sys
app = QApplication(sys.argv)
form = AppForm()
form.show()
app.exec_()
Write something into the line edits (text boxes), click the button. Profit! :-)

Note: it can be done with less code, but this is a good PyQt coding practice - create a widget to serve as a central widget of a window, populate it with a layout, etc.

Solution 2:

PyQt comes with examples when you install it. These examples contain a lot of very useful code and you can learn from them, as well as take whole code chunks and use them.

Check out, for example, the "Address book" example which pops message boxes along other things (search its sources for "messagebox").

Solution 3:

enter image description here

from PyQt4 import QtGui, QtCore

class Window( QtGui.QWidget ):

def __init__( self ):
    QtGui.QWidget.__init__( self )

    msgBox = QtGui.QMessageBox( self )
    msgBox.setIcon( QtGui.QMessageBox.Information )
    msgBox.setText( "Do not stare into laser with remaining eye" )

    msgBox.setInformativeText( "Do you really want to disable safety enforcement?" )
    msgBox.addButton( QtGui.QMessageBox.Yes )
    msgBox.addButton( QtGui.QMessageBox.No )

    msgBox.setDefaultButton( QtGui.QMessageBox.No ) 
    ret = msgBox.exec_()

    if ret == QtGui.QMessageBox.Yes:
        print( "Yes" )
        return
    else:
        print( "No" )
        return
Enter fullscreen mode Exit fullscreen mode

if name == 'main':

import sys
app = QtGui.QApplication( sys.argv )
window = Window()
# window.show()
sys.exit( app.exec_() )
Enter fullscreen mode Exit fullscreen mode

Source:

https://pythonhowto.org/howto/22358/python---How-to-display-a-message-box-on-PyQT4?
pythonhowto

Top comments (0)