PyQt4: Getting into depth

Now lets add some functionalities to the window generated. For that, I am listing the APIs to create any widget and handling signals & slots:

To create any widget:

1. textbox=QtGui.QTextBox(“content of the text box”)

Note:This will work fine unless until you need to access this textbox in some function treating it as a global variable. To avoid the errors in future, use this line:

self.textbox=QtGui.QTextBox(“content of the text box”)

adding self in beginning will make textbox an attribute of the window under which it is created.

2. self.label=QtGui.QLabel(“content of the label”)

3. self.pushbutton=QtGui.QPushButton(“text on pushbutton”)

to create singnals and slots:

This can be achieved in two ways:
1.New version API- QtCore.QObject.Connect method:
QtCore.QObject.Connect(<name of the object generating signal>,QtCore.SIGNAL(“<signal name>”), <slot>)

Example:

QtCore.QObject.Connect(self.pushbutton,QtCore.SIGNAL(“clicked()”),   self.on_pushbutton_click)

def on_pushbutton_click(self):
#write the function here to be executed on pushbutton being clicked, e.g..
self.label.setText(“pushbutton is clicked”)

2.Old style API-

<object-name>.<signal>.connect(<slot function>)
Example: button.clicked.connect(self.onClicked)

However,Prefer the first method.

So the Complete Code is as follows:
#! /usr/bin/python

import sys
from PyQt4 import QtGui, QtCore

class signalslots(QtGui.QMainWindow):

def __init__(self):
super(signalslots, self).__init__()

btn1 = QtGui.QPushButton(“Button 1”, self)
btn1.move(30, 50)

btn2 = QtGui.QPushButton(“Button 2”, self)
btn2.move(150, 50)

btn1.clicked.connect(self.buttonClicked)
btn2.clicked.connect(self.buttonClicked)

self.statusBar()

self.setGeometry(300, 300, 290, 150)
self.setWindowTitle(‘signals and slots’)
self.show()

def buttonClicked(self):
sender = self.sender()
self.statusBar().showMessage(sender.text() + ‘ was pressed’)

if __name__==’__main__’:
app = QtGui.QApplication(sys.argv)
ex = signalslots()
sys.exit(app.exec_())

Note: Here appending self prior to btn1 (self.btn1) is not needed because the btn1 is not used outside its scope. However, always use self to avoid any confusion.

 

Signals and slots
Signals and slots
pushing button 2
pushing button 2

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *