PL03-Topic02, PyQt
Back to the previous page |API for python | API for C++ |page management
List of posts to read before reading this article
Contents
Installation
For linux
$ apt install python3-tk
$ apt install python3-pyqt5
For windows
$ pip install pyqt5
Version Control
Basic
Open window
import sys
from PyQt5.QtWidgets import QApplication , QDialog
app = QApplication ( sys . argv )
mainDialog = QDialog ()
mainDialog . show ()
app . exec_ ()
import sys
from PyQt5.QtWidgets import QApplication , QWidget
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . setWindowTitle ( 'My First Application' )
self . move ( 300 , 300 )
self . resize ( 400 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Add an icon to application
import sys
from PyQt5.QtWidgets import QApplication , QWidget
from PyQt5.QtGui import QIcon
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . setWindowTitle ( 'Icon' )
self . setWindowIcon ( QIcon ( 'web.png' ))
self . setGeometry ( 300 , 800 , 500 , 500 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Cloes window
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QPushButton
from PyQt5.QtCore import QCoreApplication
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
btn = QPushButton ( 'Quit' , self )
btn . move ( 50 , 50 )
btn . resize ( btn . sizeHint ())
btn . clicked . connect ( QCoreApplication . instance (). quit )
self . setWindowTitle ( 'Quit Button' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QPushButton , QToolTip
from PyQt5.QtGui import QFont
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
QToolTip . setFont ( QFont ( 'SansSerif' , 10 ))
self . setToolTip ( 'This is a <b>QWidget</b> widget' )
btn = QPushButton ( 'Button' , self )
btn . setToolTip ( 'This is a <b>QPushButton</b> widget' )
btn . move ( 50 , 50 )
btn . resize ( btn . sizeHint ())
self . setWindowTitle ( 'Tooltips' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Status Bar
import sys
from PyQt5.QtWidgets import QApplication , QMainWindow
class MyApp ( QMainWindow ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . statusBar (). showMessage ( 'Ready' )
self . setWindowTitle ( 'Statusbar' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
import sys
from PyQt5.QtWidgets import QApplication , QMainWindow , QAction , qApp
from PyQt5.QtGui import QIcon
class MyApp ( QMainWindow ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
exitAction = QAction ( QIcon ( 'exit.png' ), 'Exit' , self )
exitAction . setShortcut ( 'Ctrl+Q' )
exitAction . setStatusTip ( 'Exit application' )
exitAction . triggered . connect ( qApp . quit )
self . statusBar ()
menubar = self . menuBar ()
menubar . setNativeMenuBar ( False )
fileMenu = menubar . addMenu ( '&File' )
fileMenu . addAction ( exitAction )
self . setWindowTitle ( 'Menubar' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
import sys
from PyQt5.QtWidgets import QApplication , QMainWindow , QAction , qApp
from PyQt5.QtGui import QIcon
class MyApp ( QMainWindow ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
exitAction = QAction ( QIcon ( 'exit.png' ), 'Exit' , self )
exitAction . setShortcut ( 'Ctrl+Q' )
exitAction . setStatusTip ( 'Exit application' )
exitAction . triggered . connect ( qApp . quit )
self . statusBar ()
self . toolbar = self . addToolBar ( 'Exit' )
self . toolbar . addAction ( exitAction )
self . setWindowTitle ( 'Toolbar' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Set the window in the center of the monitor screen
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QDesktopWidget
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . setWindowTitle ( 'Centering' )
self . resize ( 500 , 350 )
self . center ()
self . show ()
def center ( self ):
qr = self . frameGeometry ()
cp = QDesktopWidget (). availableGeometry (). center ()
qr . moveCenter ( cp )
self . move ( qr . topLeft ())
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Date and time
OUTPUT
Style decoration
import sys
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLabel , QVBoxLayout
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
lbl_red = QLabel ( 'Red' )
lbl_green = QLabel ( 'Green' )
lbl_blue = QLabel ( 'Blue' )
lbl_red . setStyleSheet ( "color: red;"
"border-style: solid;"
"border-width: 2px;"
"border-color: #FA8072;"
"border-radius: 3px" )
lbl_green . setStyleSheet ( "color: green;"
"background-color: #7FFFD4" )
lbl_blue . setStyleSheet ( "color: blue;"
"background-color: #87CEFA;"
"border-style: dashed;"
"border-width: 3px;"
"border-color: #1E90FF" )
vbox = QVBoxLayout ()
vbox . addWidget ( lbl_red )
vbox . addWidget ( lbl_green )
vbox . addWidget ( lbl_blue )
self . setLayout ( vbox )
self . setWindowTitle ( 'Stylesheet' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Layout
Absolute positioning
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLabel , QPushButton
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
label1 = QLabel ( 'Label1' , self )
label1 . move ( 20 , 20 )
label2 = QLabel ( 'Label2' , self )
label2 . move ( 20 , 60 )
btn1 = QPushButton ( 'Button1' , self )
btn1 . move ( 80 , 13 )
btn2 = QPushButton ( 'Button2' , self )
btn2 . move ( 80 , 53 )
self . setWindowTitle ( 'Absolute Positioning' )
self . setGeometry ( 300 , 300 , 400 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Box layout
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QPushButton , QHBoxLayout , QVBoxLayout
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
okButton = QPushButton ( 'OK' )
cancelButton = QPushButton ( 'Cancel' )
hbox = QHBoxLayout ()
hbox . addStretch ( 1 )
hbox . addWidget ( okButton )
hbox . addWidget ( cancelButton )
hbox . addStretch ( 1 )
vbox = QVBoxLayout ()
vbox . addStretch ( 3 )
vbox . addLayout ( hbox )
vbox . addStretch ( 1 )
self . setLayout ( vbox )
self . setWindowTitle ( 'Box Layout' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Grid layout
import sys
from PyQt5.QtWidgets import ( QApplication , QWidget , QGridLayout , QLabel , QLineEdit , QTextEdit )
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
grid = QGridLayout ()
self . setLayout ( grid )
grid . addWidget ( QLabel ( 'Title:' ), 0 , 0 )
grid . addWidget ( QLabel ( 'Author:' ), 1 , 0 )
grid . addWidget ( QLabel ( 'Review:' ), 2 , 0 )
grid . addWidget ( QLineEdit (), 0 , 1 )
grid . addWidget ( QLineEdit (), 1 , 1 )
grid . addWidget ( QTextEdit (), 2 , 1 )
self . setWindowTitle ( 'QGridLayout' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
official API
method
description
setCheckable()
True 설정 시, 누른 상태와 그렇지 않은 상태를 구분합니다.
toggle()
상태를 바꿉니다.
setIcon()
버튼의 아이콘을 설정합니다.
setEnabled()
False 설정 시, 버튼을 사용할 수 없습니다.
isChecked()
버튼의 선택 여부를 반환합니다.
setText()
버튼에 표시될 텍스트를 설정합니다.
text()
버튼에 표시된 텍스트를 반환합니다.
signal
description
clicked()
버튼을 클릭할 때 발생합니다.
pressed()
버튼이 눌렸을 때 발생합니다.
released()
버튼을 눌렀다 뗄 때 발생합니다.
toggled()
버튼의 상태가 바뀔 때 발생합니다.
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QPushButton , QVBoxLayout
from PyQt5.QtGui import QIcon , QPixmap
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
btn1 = QPushButton ( '&Button1' , self )
btn1 . setCheckable ( True )
btn1 . toggle ()
btn2 = QPushButton ( self )
btn2 . setText ( 'Button&2' )
btn3 = QPushButton ( 'Button3' , self )
btn3 . setEnabled ( False )
vbox = QVBoxLayout ()
vbox . addWidget ( btn1 )
vbox . addWidget ( btn2 )
vbox . addWidget ( btn3 )
self . setLayout ( vbox )
self . setWindowTitle ( 'QPushButton' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QLabel
official API
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLabel , QVBoxLayout
from PyQt5.QtCore import Qt
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
label1 = QLabel ( 'First Label' , self )
label1 . setAlignment ( Qt . AlignCenter )
label2 = QLabel ( 'Second Label' , self )
label2 . setAlignment ( Qt . AlignVCenter )
font1 = label1 . font ()
font1 . setPointSize ( 20 )
font2 = label2 . font ()
font2 . setFamily ( 'Times New Roman' )
font2 . setBold ( True )
label1 . setFont ( font1 )
label2 . setFont ( font2 )
layout = QVBoxLayout ()
layout . addWidget ( label1 )
layout . addWidget ( label2 )
self . setLayout ( layout )
self . setWindowTitle ( 'QLabel' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QCheckBox
official API
method
description
text()
체크 박스의 라벨 텍스트를 반환합니다.
setText()
체크 박스의 라벨 텍스트를 설정합니다.
isChecked()
체크 박스의 상태를 반환합니다. (True/False)
checkState()
체크 박스의 상태를 반환합니다. (2/1/0)
toggle()
체크 박스의 상태를 변경합니다.
pressed()
체크 박스를 누를 때 신호를 발생합니다.
released()
체크 박스에서 뗄 때 신호를 발생합니다.
clicked()
체크 박스를 클릭할 때 신호를 발생합니다.
stateChanged()
체크 박스의 상태가 바뀔 때 신호를 발생합니다.
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QCheckBox
from PyQt5.QtCore import Qt
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
cb = QCheckBox ( 'Show title' , self )
cb . move ( 20 , 20 )
cb . toggle ()
cb . stateChanged . connect ( self . changeTitle )
self . setWindowTitle ( 'QCheckBox' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def changeTitle ( self , state ):
if state == Qt . Checked :
self . setWindowTitle ( 'QCheckBox' )
else :
self . setWindowTitle ( ' ' )
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
official API
method
description
text()
버튼의 텍스트를 반환합니다.
setText()
라벨에 들어갈 텍스트를 설정합니다.
setChecked()
버튼의 선택 여부를 설정합니다.
isChecked()
버튼의 선택 여부를 반환합니다.
toggle()
버튼의 상태를 변경합니다.
signal
description
pressed()
버튼을 누를 때 신호를 발생합니다.
released()
버튼에서 뗄 때 신호를 발생합니다.
clicked()
버튼을 클릭할 때 신호를 발생합니다.
toggled()
버튼의 상태가 바뀔 때 신호를 발생합니다.
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QRadioButton
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
rbtn1 = QRadioButton ( 'First Button' , self )
rbtn1 . move ( 50 , 50 )
rbtn1 . setChecked ( True )
rbtn2 = QRadioButton ( self )
rbtn2 . move ( 50 , 70 )
rbtn2 . setText ( 'Second Button' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . setWindowTitle ( 'QRadioButton' )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QComboBox
official API
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLabel , QComboBox
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . lbl = QLabel ( 'Option1' , self )
self . lbl . move ( 50 , 150 )
cb = QComboBox ( self )
cb . addItem ( 'Option1' )
cb . addItem ( 'Option2' )
cb . addItem ( 'Option3' )
cb . addItem ( 'Option4' )
cb . move ( 50 , 50 )
cb . activated [ str ]. connect ( self . onActivated )
self . setWindowTitle ( 'QComboBox' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def onActivated ( self , text ):
self . lbl . setText ( text + ' was selected' )
self . lbl . adjustSize ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QLineEdit
official API
constant
value
description
QLineEdit.Normal
0
입력된 문자를 표시합니다. (기본값)
QLineEdit.NoEcho
1
문자열을 표시하지 않습니다. 이 설정은 비밀번호의 글자수도 공개하지 않을 때 유용합니다.
QLineEdit.Password
2
입력된 문자 대신 비밀번호 가림용 문자를 표시합니다.
QLineEdit.PasswordEchoOnEdit
3
입력할 때만 문자를 표시하고, 수정 중에는 다른 문자를 표시합니다.
signal
description
cursorPositionChanged()
커서가 움직일 때 발생하는 신호를 발생합니다.
editingFinished()
편집이 끝났을 때 (Return/Enter 버튼이 눌릴 때) 신호를 발생합니다.
returnPressed()
Return/Enter 버튼이 눌릴 때 신호를 발생합니다.
selectionChanged()
선택 영역이 바뀔 때 신호를 발생합니다.
textChanged()
텍스트가 변경될 때 신호를 발생합니다.
textEdited()
텍스트가 편집될 때 신호를 발생합니다.
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLabel , QLineEdit
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . lbl = QLabel ( self )
self . lbl . move ( 10 , 40 )
qle = QLineEdit ( self )
qle . move ( 10 , 150 )
qle . textChanged [ str ]. connect ( self . onChanged )
self . setWindowTitle ( 'QLineEdit' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def onChanged ( self , text ):
self . lbl . setText ( text )
self . lbl . adjustSize ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QProgressBar
official API
constant
value
description
QSlider.NoTicks
0
틱을 표시하지 않습니다.
QSlider.TicksAbove
1
틱을 (수평) 슬라이더 위쪽에 표시합니다.
QSlider.TicksBelow
2
틱을 (수평) 슬라이더 아래쪽에 표시합니다.
QSlider.TicksBothSides
3
틱을 (수평) 슬라이더 양쪽에 표시합니다.
QSlider.TicksLeft
TicksAbove
틱을 (수직) 슬라이더 왼쪽에 표시합니다.
QSlider.TicksRight
TicksBelow
틱을 (수직) 슬라이더 오른쪽에 표시합니다.
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QPushButton , QProgressBar
from PyQt5.QtCore import QBasicTimer
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . pbar = QProgressBar ( self )
self . pbar . setGeometry ( 30 , 40 , 200 , 25 )
self . btn = QPushButton ( 'Start' , self )
self . btn . move ( 40 , 80 )
self . btn . clicked . connect ( self . doAction )
self . timer = QBasicTimer ()
self . step = 0
self . setWindowTitle ( 'QProgressBar' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def timerEvent ( self , e ):
if self . step >= 100 :
self . timer . stop ()
self . btn . setText ( 'Finished' )
return
self . step = self . step + 1
self . pbar . setValue ( self . step )
def doAction ( self ):
if self . timer . isActive ():
self . timer . stop ()
self . btn . setText ( 'Start' )
else :
self . timer . start ( 100 , self )
self . btn . setText ( 'Stop' )
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QSlider & QDial
official API(QSlider) & official API(QDial)
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QSlider , QDial , QPushButton
from PyQt5.QtCore import Qt
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . slider = QSlider ( Qt . Horizontal , self )
self . slider . move ( 30 , 30 )
self . slider . setRange ( 0 , 50 )
self . slider . setSingleStep ( 2 )
self . dial = QDial ( self )
self . dial . move ( 30 , 50 )
self . dial . setRange ( 0 , 50 )
btn = QPushButton ( 'Default' , self )
btn . move ( 35 , 160 )
self . slider . valueChanged . connect ( self . dial . setValue )
self . dial . valueChanged . connect ( self . slider . setValue )
btn . clicked . connect ( self . button_clicked )
self . setWindowTitle ( 'QSlider and QDial' )
self . setGeometry ( 300 , 300 , 400 , 200 )
self . show ()
def button_clicked ( self ):
self . slider . setValue ( 0 )
self . dial . setValue ( 0 )
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QSplitter
official API
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QHBoxLayout , QFrame , QSplitter
from PyQt5.QtCore import Qt
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
hbox = QHBoxLayout ()
top = QFrame ()
top . setFrameShape ( QFrame . Box )
midleft = QFrame ()
midleft . setFrameShape ( QFrame . StyledPanel )
midright = QFrame ()
midright . setFrameShape ( QFrame . Panel )
bottom = QFrame ()
bottom . setFrameShape ( QFrame . WinPanel )
bottom . setFrameShadow ( QFrame . Sunken )
splitter1 = QSplitter ( Qt . Horizontal )
splitter1 . addWidget ( midleft )
splitter1 . addWidget ( midright )
splitter2 = QSplitter ( Qt . Vertical )
splitter2 . addWidget ( top )
splitter2 . addWidget ( splitter1 )
splitter2 . addWidget ( bottom )
hbox . addWidget ( splitter2 )
self . setLayout ( hbox )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . setWindowTitle ( 'QSplitter' )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QGroupBox
official API
import sys
from PyQt5.QtWidgets import ( QApplication , QWidget , QGroupBox , QRadioButton , QCheckBox , QPushButton , QMenu , QGridLayout , QVBoxLayout )
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
grid = QGridLayout ()
grid . addWidget ( self . createFirstExclusiveGroup (), 0 , 0 )
grid . addWidget ( self . createSecondExclusiveGroup (), 1 , 0 )
grid . addWidget ( self . createNonExclusiveGroup (), 0 , 1 )
grid . addWidget ( self . createPushButtonGroup (), 1 , 1 )
self . setLayout ( grid )
self . setWindowTitle ( 'Box Layout' )
self . setGeometry ( 300 , 300 , 480 , 320 )
self . show ()
def createFirstExclusiveGroup ( self ):
groupbox = QGroupBox ( 'Exclusive Radio Buttons' )
radio1 = QRadioButton ( 'Radio1' )
radio2 = QRadioButton ( 'Radio2' )
radio3 = QRadioButton ( 'Radio3' )
radio1 . setChecked ( True )
vbox = QVBoxLayout ()
vbox . addWidget ( radio1 )
vbox . addWidget ( radio2 )
vbox . addWidget ( radio3 )
groupbox . setLayout ( vbox )
return groupbox
def createSecondExclusiveGroup ( self ):
groupbox = QGroupBox ( 'Exclusive Radio Buttons' )
groupbox . setCheckable ( True )
groupbox . setChecked ( False )
radio1 = QRadioButton ( 'Radio1' )
radio2 = QRadioButton ( 'Radio2' )
radio3 = QRadioButton ( 'Radio3' )
radio1 . setChecked ( True )
checkbox = QCheckBox ( 'Independent Checkbox' )
checkbox . setChecked ( True )
vbox = QVBoxLayout ()
vbox . addWidget ( radio1 )
vbox . addWidget ( radio2 )
vbox . addWidget ( radio3 )
vbox . addWidget ( checkbox )
vbox . addStretch ( 1 )
groupbox . setLayout ( vbox )
return groupbox
def createNonExclusiveGroup ( self ):
groupbox = QGroupBox ( 'Non-Exclusive Checkboxes' )
groupbox . setFlat ( True )
checkbox1 = QCheckBox ( 'Checkbox1' )
checkbox2 = QCheckBox ( 'Checkbox2' )
checkbox2 . setChecked ( True )
tristatebox = QCheckBox ( 'Tri-state Button' )
tristatebox . setTristate ( True )
vbox = QVBoxLayout ()
vbox . addWidget ( checkbox1 )
vbox . addWidget ( checkbox2 )
vbox . addWidget ( tristatebox )
vbox . addStretch ( 1 )
groupbox . setLayout ( vbox )
return groupbox
def createPushButtonGroup ( self ):
groupbox = QGroupBox ( 'Push Buttons' )
groupbox . setCheckable ( True )
groupbox . setChecked ( True )
pushbutton = QPushButton ( 'Normal Button' )
togglebutton = QPushButton ( 'Toggle Button' )
togglebutton . setCheckable ( True )
togglebutton . setChecked ( True )
flatbutton = QPushButton ( 'Flat Button' )
flatbutton . setFlat ( True )
popupbutton = QPushButton ( 'Popup Button' )
menu = QMenu ( self )
menu . addAction ( 'First Item' )
menu . addAction ( 'Second Item' )
menu . addAction ( 'Third Item' )
menu . addAction ( 'Fourth Item' )
popupbutton . setMenu ( menu )
vbox = QVBoxLayout ()
vbox . addWidget ( pushbutton )
vbox . addWidget ( togglebutton )
vbox . addWidget ( flatbutton )
vbox . addWidget ( popupbutton )
vbox . addStretch ( 1 )
groupbox . setLayout ( vbox )
return groupbox
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
official API
import sys
from PyQt5.QtWidgets import ( QApplication , QWidget , QTabWidget , QVBoxLayout )
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
tab1 = QWidget ()
tab2 = QWidget ()
tabs = QTabWidget ()
tabs . addTab ( tab1 , 'Tab1' )
tabs . addTab ( tab2 , 'Tab2' )
vbox = QVBoxLayout ()
vbox . addWidget ( tabs )
self . setLayout ( vbox )
self . setWindowTitle ( 'QTabWidget' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Advanced
import sys
from PyQt5.QtWidgets import *
class MyApp ( QDialog ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
tabs = QTabWidget ()
tabs . addTab ( FirstTab (), 'First' )
tabs . addTab ( SecondTab (), 'Second' )
tabs . addTab ( ThirdTab (), 'Third' )
buttonbox = QDialogButtonBox ( QDialogButtonBox . Ok | QDialogButtonBox . Cancel )
buttonbox . accepted . connect ( self . accept )
buttonbox . rejected . connect ( self . reject )
vbox = QVBoxLayout ()
vbox . addWidget ( tabs )
vbox . addWidget ( buttonbox )
self . setLayout ( vbox )
self . setWindowTitle ( 'QTabWidget' )
self . setGeometry ( 300 , 300 , 400 , 300 )
self . show ()
class FirstTab ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
name = QLabel ( 'Name:' )
nameedit = QLineEdit ()
age = QLabel ( 'Age:' )
ageedit = QLineEdit ()
nation = QLabel ( 'Nation:' )
nationedit = QLineEdit ()
vbox = QVBoxLayout ()
vbox . addWidget ( name )
vbox . addWidget ( nameedit )
vbox . addWidget ( age )
vbox . addWidget ( ageedit )
vbox . addWidget ( nation )
vbox . addWidget ( nationedit )
vbox . addStretch ()
self . setLayout ( vbox )
class SecondTab ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
lan_group = QGroupBox ( 'Select Your Language' )
combo = QComboBox ()
list = [ 'Korean' , 'English' , 'Chinese' ]
combo . addItems ( list )
vbox1 = QVBoxLayout ()
vbox1 . addWidget ( combo )
lan_group . setLayout ( vbox1 )
learn_group = QGroupBox ( 'Select What You Want To Learn' )
korean = QCheckBox ( 'Korean' )
english = QCheckBox ( 'English' )
chinese = QCheckBox ( 'Chinese' )
vbox2 = QVBoxLayout ()
vbox2 . addWidget ( korean )
vbox2 . addWidget ( english )
vbox2 . addWidget ( chinese )
learn_group . setLayout ( vbox2 )
vbox = QVBoxLayout ()
vbox . addWidget ( lan_group )
vbox . addWidget ( learn_group )
self . setLayout ( vbox )
class ThirdTab ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
lbl = QLabel ( 'Terms and Conditions' )
text_browser = QTextBrowser ()
text_browser . setText ( 'This is the terms and conditions' )
checkbox = QCheckBox ( 'Check the terms and conditions.' )
vbox = QVBoxLayout ()
vbox . addWidget ( lbl )
vbox . addWidget ( text_browser )
vbox . addWidget ( checkbox )
self . setLayout ( vbox )
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QPixmap
official API
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLabel , QVBoxLayout
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
pixmap = QPixmap ( 'landscape.jpg' )
lbl_img = QLabel ()
lbl_img . setPixmap ( pixmap )
lbl_size = QLabel ( 'Width: ' + str ( pixmap . width ()) + ', Height: ' + str ( pixmap . height ()))
lbl_size . setAlignment ( Qt . AlignCenter )
vbox = QVBoxLayout ()
vbox . addWidget ( lbl_img )
vbox . addWidget ( lbl_size )
self . setLayout ( vbox )
self . setWindowTitle ( 'QPixmap' )
self . move ( 300 , 300 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
official API
import sys
from PyQt5.QtWidgets import ( QApplication , QWidget , QLabel , QVBoxLayout , QCalendarWidget )
from PyQt5.QtCore import QDate
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
cal = QCalendarWidget ( self )
cal . setGridVisible ( True )
cal . clicked [ QDate ]. connect ( self . showDate )
self . lbl = QLabel ( self )
date = cal . selectedDate ()
self . lbl . setText ( date . toString ())
vbox = QVBoxLayout ()
vbox . addWidget ( cal )
vbox . addWidget ( self . lbl )
self . setLayout ( vbox )
self . setWindowTitle ( 'QCalendarWidget' )
self . setGeometry ( 300 , 300 , 400 , 300 )
self . show ()
def showDate ( self , date ):
self . lbl . setText ( date . toString ())
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QSpinBox
official API
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLabel , QSpinBox , QVBoxLayout
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . lbl1 = QLabel ( 'QSpinBox' )
self . spinbox = QSpinBox ()
self . spinbox . setMinimum ( - 10 )
self . spinbox . setMaximum ( 30 )
# self.spinbox.setRange(-10, 30)
self . spinbox . setSingleStep ( 2 )
self . lbl2 = QLabel ( '0' )
self . spinbox . valueChanged . connect ( self . value_changed )
vbox = QVBoxLayout ()
vbox . addWidget ( self . lbl1 )
vbox . addWidget ( self . spinbox )
vbox . addWidget ( self . lbl2 )
vbox . addStretch ()
self . setLayout ( vbox )
self . setWindowTitle ( 'QSpinBox' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def value_changed ( self ):
self . lbl2 . setText ( str ( self . spinbox . value ()))
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QDoubleSpinBox
official API
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLabel , QDoubleSpinBox , QVBoxLayout
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . lbl1 = QLabel ( 'QDoubleSpinBox' )
self . dspinbox = QDoubleSpinBox ()
self . dspinbox . setRange ( 0 , 100 )
self . dspinbox . setSingleStep ( 0.5 )
self . dspinbox . setPrefix ( '$ ' )
self . dspinbox . setDecimals ( 1 )
self . lbl2 = QLabel ( '$ 0.0' )
self . dspinbox . valueChanged . connect ( self . value_changed )
vbox = QVBoxLayout ()
vbox . addWidget ( self . lbl1 )
vbox . addWidget ( self . dspinbox )
vbox . addWidget ( self . lbl2 )
vbox . addStretch ()
self . setLayout ( vbox )
self . setWindowTitle ( 'QDoubleSpinBox' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def value_changed ( self ):
self . lbl2 . setText ( '$ ' + str ( self . dspinbox . value ()))
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QDateEdit
official API
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLabel , QDateEdit , QVBoxLayout
from PyQt5.QtCore import QDate
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
lbl = QLabel ( 'QDateEdit' )
dateedit = QDateEdit ( self )
dateedit . setDate ( QDate . currentDate ())
dateedit . setMinimumDate ( QDate ( 1900 , 1 , 1 ))
dateedit . setMaximumDate ( QDate ( 2100 , 12 , 31 ))
# dateedit.setDateRange(QDate(1900, 1, 1), QDate(2100, 12, 31))
vbox = QVBoxLayout ()
vbox . addWidget ( lbl )
vbox . addWidget ( dateedit )
vbox . addStretch ()
self . setLayout ( vbox )
self . setWindowTitle ( 'QDateEdit' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QTimeEdit
official API
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLabel , QTimeEdit , QVBoxLayout
from PyQt5.QtCore import QTime
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
lbl = QLabel ( 'QTimeEdit' )
timeedit = QTimeEdit ( self )
timeedit . setTime ( QTime . currentTime ())
timeedit . setTimeRange ( QTime ( 3 , 00 , 00 ), QTime ( 23 , 30 , 00 ))
timeedit . setDisplayFormat ( 'hh:mm:ss' )
vbox = QVBoxLayout ()
vbox . addWidget ( lbl )
vbox . addWidget ( timeedit )
vbox . addStretch ()
self . setLayout ( vbox )
self . setWindowTitle ( 'QTimeEdit' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QDateTimeEdit
official API
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLabel , QDateTimeEdit , QVBoxLayout
from PyQt5.QtCore import QDateTime
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
lbl = QLabel ( 'QTimeEdit' )
datetimeedit = QDateTimeEdit ( self )
datetimeedit . setDateTime ( QDateTime . currentDateTime ())
datetimeedit . setDateTimeRange ( QDateTime ( 1900 , 1 , 1 , 00 , 00 , 00 ), QDateTime ( 2100 , 1 , 1 , 00 , 00 , 00 ))
datetimeedit . setDisplayFormat ( 'yyyy.MM.dd hh:mm:ss' )
vbox = QVBoxLayout ()
vbox . addWidget ( lbl )
vbox . addWidget ( datetimeedit )
vbox . addStretch ()
self . setLayout ( vbox )
self . setWindowTitle ( 'QDateTimeEdit' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QTextBrower
official API
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLineEdit , QTextBrowser , QPushButton , QVBoxLayout
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . le = QLineEdit ()
self . le . returnPressed . connect ( self . append_text )
self . tb = QTextBrowser ()
self . tb . setAcceptRichText ( True )
self . tb . setOpenExternalLinks ( True )
self . clear_btn = QPushButton ( 'Clear' )
self . clear_btn . pressed . connect ( self . clear_text )
vbox = QVBoxLayout ()
vbox . addWidget ( self . le , 0 )
vbox . addWidget ( self . tb , 1 )
vbox . addWidget ( self . clear_btn , 2 )
self . setLayout ( vbox )
self . setWindowTitle ( 'QTextBrowser' )
self . setGeometry ( 300 , 300 , 300 , 300 )
self . show ()
def append_text ( self ):
text = self . le . text ()
self . tb . append ( text )
self . le . clear ()
def clear_text ( self ):
self . tb . clear ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QTextEdit
official API
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLabel , QTextEdit , QVBoxLayout
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . lbl1 = QLabel ( 'Enter your sentence:' )
self . te = QTextEdit ()
self . te . setAcceptRichText ( False )
self . lbl2 = QLabel ( 'The number of words is 0' )
self . te . textChanged . connect ( self . text_changed )
vbox = QVBoxLayout ()
vbox . addWidget ( self . lbl1 )
vbox . addWidget ( self . te )
vbox . addWidget ( self . lbl2 )
vbox . addStretch ()
self . setLayout ( vbox )
self . setWindowTitle ( 'QTextEdit' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def text_changed ( self ):
text = self . te . toPlainText ()
self . lbl2 . setText ( 'The number of words is ' + str ( len ( text . split ())))
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Dialog
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QPushButton , QLineEdit , QInputDialog
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . btn = QPushButton ( 'Dialog' , self )
self . btn . move ( 30 , 30 )
self . btn . clicked . connect ( self . showDialog )
self . le = QLineEdit ( self )
self . le . move ( 120 , 35 )
self . setWindowTitle ( 'Input dialog' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def showDialog ( self ):
text , ok = QInputDialog . getText ( self , 'Input Dialog' , 'Enter your name:' )
if ok :
self . le . setText ( str ( text ))
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QColorDialog
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QPushButton , QFrame , QColorDialog
from PyQt5.QtGui import QColor
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
col = QColor ( 0 , 0 , 0 )
self . btn = QPushButton ( 'Dialog' , self )
self . btn . move ( 30 , 30 )
self . btn . clicked . connect ( self . showDialog )
self . frm = QFrame ( self )
self . frm . setStyleSheet ( 'QWidget { background-color: %s }' % col . name ())
self . frm . setGeometry ( 130 , 35 , 100 , 100 )
self . setWindowTitle ( 'Color Dialog' )
self . setGeometry ( 300 , 300 , 250 , 180 )
self . show ()
def showDialog ( self ):
col = QColorDialog . getColor ()
if col . isValid ():
self . frm . setStyleSheet ( 'QWidget { background-color: %s }' % col . name ())
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QFontDialog
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QVBoxLayout , \
QPushButton , QSizePolicy , QLabel , QFontDialog
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
btn = QPushButton ( 'Dialog' , self )
btn . setSizePolicy ( QSizePolicy . Fixed , QSizePolicy . Fixed )
btn . move ( 20 , 20 )
btn . clicked . connect ( self . showDialog )
vbox = QVBoxLayout ()
vbox . addWidget ( btn )
self . lbl = QLabel ( 'The quick brown fox jumps over the lazy dog' , self )
self . lbl . move ( 130 , 20 )
vbox . addWidget ( self . lbl )
self . setLayout ( vbox )
self . setWindowTitle ( 'Font Dialog' )
self . setGeometry ( 300 , 300 , 250 , 180 )
self . show ()
def showDialog ( self ):
font , ok = QFontDialog . getFont ()
if ok :
self . lbl . setFont ( font )
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QFileDialog
import sys
from PyQt5.QtWidgets import QApplication , QMainWindow , QTextEdit , QAction , QFileDialog
from PyQt5.QtGui import QIcon
class MyApp ( QMainWindow ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . textEdit = QTextEdit ()
self . setCentralWidget ( self . textEdit )
self . statusBar ()
openFile = QAction ( QIcon ( 'open.png' ), 'Open' , self )
openFile . setShortcut ( 'Ctrl+O' )
openFile . setStatusTip ( 'Open New File' )
openFile . triggered . connect ( self . showDialog )
menubar = self . menuBar ()
menubar . setNativeMenuBar ( False )
fileMenu = menubar . addMenu ( '&File' )
fileMenu . addAction ( openFile )
self . setWindowTitle ( 'File Dialog' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def showDialog ( self ):
fname = QFileDialog . getOpenFileName ( self , 'Open file' , './' )
if fname [ 0 ]:
f = open ( fname [ 0 ], 'r' )
with f :
data = f . read ()
self . textEdit . setText ( data )
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
QMessageBox
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QMessageBox
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . setWindowTitle ( 'QMessageBox' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def closeEvent ( self , event ):
reply = QMessageBox . question ( self , 'Message' , 'Are you sure to quit?' ,
QMessageBox . Yes | QMessageBox . No , QMessageBox . No )
if reply == QMessageBox . Yes :
event . accept ()
else :
event . ignore ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Signal and slot
Connect
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLCDNumber , QDial , QVBoxLayout
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
lcd = QLCDNumber ( self )
dial = QDial ( self )
vbox = QVBoxLayout ()
vbox . addWidget ( lcd )
vbox . addWidget ( dial )
self . setLayout ( vbox )
dial . valueChanged . connect ( lcd . display )
self . setWindowTitle ( 'Signal and Slot' )
self . setGeometry ( 300 , 300 , 200 , 200 )
self . show ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Event handler - Creation
import sys
from PyQt5.QtWidgets import ( QApplication , QWidget , QLCDNumber , QDial , QPushButton , QVBoxLayout , QHBoxLayout )
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
lcd = QLCDNumber ( self )
dial = QDial ( self )
btn1 = QPushButton ( 'Big' , self )
btn2 = QPushButton ( 'Small' , self )
hbox = QHBoxLayout ()
hbox . addWidget ( btn1 )
hbox . addWidget ( btn2 )
vbox = QVBoxLayout ()
vbox . addWidget ( lcd )
vbox . addWidget ( dial )
vbox . addLayout ( hbox )
self . setLayout ( vbox )
dial . valueChanged . connect ( lcd . display )
btn1 . clicked . connect ( self . resizeBig )
btn2 . clicked . connect ( self . resizeSmall )
self . setWindowTitle ( 'Signal and Slot' )
self . setGeometry ( 200 , 200 , 200 , 250 )
self . show ()
def resizeBig ( self ):
self . resize ( 400 , 500 )
def resizeSmall ( self ):
self . resize ( 200 , 250 )
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Event handler - Reconfiguration(1)
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication , QWidget
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . setWindowTitle ( 'Reimplementing event handler' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def keyPressEvent ( self , e ):
if e . key () == Qt . Key_Escape :
self . close ()
elif e . key () == Qt . Key_F :
self . showFullScreen ()
elif e . key () == Qt . Key_N :
self . showNormal ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Event handler - Reconfiguration(2)
import sys
from PyQt5.QtWidgets import QApplication , QWidget , QLabel
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
x = 0
y = 0
self . text = 'x: {0}, y: {1}' . format ( x , y )
self . label = QLabel ( self . text , self )
self . label . move ( 20 , 20 )
self . setMouseTracking ( True )
self . setWindowTitle ( 'Reimplementing event handler' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def mouseMoveEvent ( self , e ):
x = e . x ()
y = e . y ()
text = 'x: {0}, y: {1}' . format ( x , y )
self . label . setText ( text )
self . label . adjustSize ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Custom signal
import sys
from PyQt5.QtCore import pyqtSignal , QObject
from PyQt5.QtWidgets import QApplication , QMainWindow
class Communicate ( QObject ):
closeApp = pyqtSignal ()
class MyApp ( QMainWindow ):
def __init__ ( self ):
super (). __init__ ()
self . initUI ()
def initUI ( self ):
self . c = Communicate ()
self . c . closeApp . connect ( self . close )
self . setWindowTitle ( 'Emitting Signal' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def mousePressEvent ( self , e ):
self . c . closeApp . emit ()
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Building .exe file
Macro
Macro program(1)
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QTimer
import win32api , win32con
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . x_le = QLineEdit ()
self . y_le = QLineEdit ()
self . t_le = QLineEdit ()
self . start_btn = QPushButton ( 'Start' , self )
self . timer = QTimer ()
self . initUI ()
def initUI ( self ):
hbox1 = QHBoxLayout ()
hbox1 . addWidget ( QLabel ( 'x 위치: ' ))
hbox1 . addWidget ( self . x_le )
hbox1 . addWidget ( QLabel ( 'y 위치: ' ))
hbox1 . addWidget ( self . y_le )
hbox2 = QHBoxLayout ()
hbox2 . addStretch ( 1 )
hbox2 . addWidget ( QLabel ( 'Delay: ' ))
hbox2 . addWidget ( self . t_le )
hbox2 . addStretch ( 1 )
hbox3 = QHBoxLayout ()
hbox3 . addStretch ( 1 )
hbox3 . addWidget ( self . start_btn )
hbox3 . addStretch ( 1 )
vbox = QVBoxLayout ()
vbox . addLayout ( hbox1 )
vbox . addLayout ( hbox2 )
vbox . addLayout ( hbox3 )
self . setLayout ( vbox )
self . start_btn . clicked . connect ( self . start_btn_click )
self . setWindowTitle ( 'Repeated Click' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def start_btn_click ( self ):
delay = int ( self . t_le . text ())
self . timer . start ( delay * 1000 )
self . timer . timeout . connect ( self . mouse_click )
def mouse_click ( self ):
x = int ( self . x_le . text ())
y = int ( self . y_le . text ())
win32api . SetCursorPos (( x , y ))
win32api . mouse_event ( win32con . MOUSEEVENTF_LEFTDOWN , x , y , 0 , 0 )
win32api . mouse_event ( win32con . MOUSEEVENTF_LEFTUP , x , y , 0 , 0 )
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Macro program(2)
import sys
import pyautogui
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPixmap
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . open_btn = QPushButton ( 'Open Image' )
self . label = QLabel ()
self . x_le = QLineEdit ()
self . y_le = QLineEdit ()
self . n_le = QLineEdit ()
self . t_le = QLineEdit ()
self . click_btn = QPushButton ( 'Click' )
self . fname = ''
self . initUI ()
def initUI ( self ):
hbox = QHBoxLayout ()
hbox . addStretch ( 1 )
hbox . addWidget ( self . label )
hbox . addStretch ( 1 )
hbox2 = QHBoxLayout ()
hbox2 . addWidget ( QLabel ( 'x: ' ))
hbox2 . addWidget ( self . x_le )
hbox2 . addWidget ( QLabel ( 'y: ' ))
hbox2 . addWidget ( self . y_le )
hbox3 = QHBoxLayout ()
hbox3 . addWidget ( QLabel ( '횟수: ' ))
hbox3 . addWidget ( self . n_le )
hbox3 . addWidget ( QLabel ( '딜레이: ' ))
hbox3 . addWidget ( self . t_le )
vbox = QVBoxLayout ()
vbox . addWidget ( self . open_btn )
vbox . addLayout ( hbox )
vbox . addLayout ( hbox2 )
vbox . addLayout ( hbox3 )
vbox . addWidget ( self . click_btn )
self . setLayout ( vbox )
self . open_btn . clicked . connect ( self . show_dialog )
self . click_btn . clicked . connect ( self . click_btn_clicked )
self . setWindowTitle ( 'Image' )
self . setGeometry ( 300 , 300 , 300 , 300 )
self . show ()
def show_dialog ( self ):
fname = QFileDialog . getOpenFileName ( self , 'Open file' , './' )
if fname [ 0 ]:
pixmap = QPixmap ( fname [ 0 ])
self . label . setPixmap ( pixmap . scaledToWidth ( pixmap . width () * 1.1 ))
self . fname = fname [ 0 ]
def click_btn_clicked ( self ):
n = int ( self . n_le . text ())
t = float ( self . t_le . text ())
if self . x_le . text () and self . y_le . text ():
x_pos = int ( self . x_le . text ())
y_pos = int ( self . y_le . text ())
pyautogui . click ( x_pos , y_pos , clicks = n , interval = t )
elif self . fname :
center = pyautogui . locateCenterOnScreen ( self . fname )
pyautogui . click ( center , clicks = n , interval = t )
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Macro program(3)
import sys
import pyautogui
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPixmap
class MyApp ( QWidget ):
def __init__ ( self ):
super (). __init__ ()
self . open_btn = QPushButton ( 'Open Image' )
self . label = []
self . x_le = QLineEdit ()
self . y_le = QLineEdit ()
self . n_le = QLineEdit ()
self . t_le = QLineEdit ()
self . click_btn = QPushButton ( 'Click' )
self . fname = []
self . hbox_label = QHBoxLayout ()
self . vbox = QVBoxLayout ()
self . initUI ()
def initUI ( self ):
hbox_xy = QHBoxLayout ()
hbox_xy . addWidget ( QLabel ( 'x: ' ))
hbox_xy . addWidget ( self . x_le )
hbox_xy . addWidget ( QLabel ( 'y: ' ))
hbox_xy . addWidget ( self . y_le )
hbox_nt = QHBoxLayout ()
hbox_nt . addWidget ( QLabel ( '횟수: ' ))
hbox_nt . addWidget ( self . n_le )
hbox_nt . addWidget ( QLabel ( '딜레이: ' ))
hbox_nt . addWidget ( self . t_le )
self . vbox . addWidget ( self . open_btn )
self . vbox . addStretch ( 1 )
self . vbox . addLayout ( self . hbox_label )
self . vbox . addStretch ( 1 )
self . vbox . addLayout ( hbox_xy )
self . vbox . addLayout ( hbox_nt )
self . vbox . addWidget ( self . click_btn )
self . setLayout ( self . vbox )
self . open_btn . clicked . connect ( self . show_dialog )
self . click_btn . clicked . connect ( self . click_btn_clicked )
self . setWindowTitle ( 'Image' )
self . setGeometry ( 300 , 300 , 300 , 200 )
self . show ()
def show_dialog ( self ):
fname = QFileDialog . getOpenFileName ( self , 'Open file' , './' )
if fname [ 0 ]:
pixmap = QPixmap ( fname [ 0 ])
self . label . append ( QLabel ())
self . label [ - 1 ]. setPixmap ( pixmap . scaledToWidth ( pixmap . width () * 1.1 ))
self . fname . append ( fname [ 0 ])
self . hbox_label . addWidget ( self . label [ - 1 ])
def click_btn_clicked ( self ):
n = int ( self . n_le . text ())
t = float ( self . t_le . text ())
if self . x_le . text () and self . y_le . text ():
x_pos = int ( self . x_le . text ())
y_pos = int ( self . y_le . text ())
pyautogui . click ( x_pos , y_pos , clicks = n , interval = t )
elif len ( self . fname ):
print ( self . fname )
for i in range ( n ):
for j in range ( len ( self . fname )):
center = pyautogui . locateCenterOnScreen ( self . fname [ j ])
pyautogui . click ( center , interval = t )
if __name__ == '__main__' :
app = QApplication ( sys . argv )
ex = MyApp ()
sys . exit ( app . exec_ ())
OUTPUT
Reference and several tips
List of posts followed by this article
Reference
OUTPUT
Please enable JavaScript to view the comments powered by Disqus.