layout | title | categories | comments | tags | ||
---|---|---|---|---|---|---|
post |
PL03-Topic02, PyQt |
|
true |
|
Back to the previous page|API for python| API for C++|page management
List of posts to read before reading this article
{:.no_toc}
- ToC {:toc}
$ apt install python3-tk
$ apt install python3-pyqt5
$ pip install pyqt5
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
![그림1](https://user-images.githubusercontent.com/52376448/64914151-513d3280-d788-11e9-84cd-af0cebde2f1f.png)
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
![그림3](https://user-images.githubusercontent.com/52376448/64914412-c9f1be00-d78b-11e9-9e4c-4b59a9d925cc.png)
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
![그림5](https://user-images.githubusercontent.com/52376448/64926021-9e2a1300-d833-11e9-8692-2c867e9d338f.png)
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
![그림6](https://user-images.githubusercontent.com/52376448/64926160-2bba3280-d835-11e9-852e-4873fc5a74ed.png)
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
![그림7](https://user-images.githubusercontent.com/52376448/64926190-a7b47a80-d835-11e9-865a-ec0bd6594d0d.png)
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
![그림8](https://user-images.githubusercontent.com/52376448/64926326-1cd47f80-d837-11e9-888d-374889e49c56.png)
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
![그림9](https://user-images.githubusercontent.com/52376448/64926418-23172b80-d838-11e9-911f-33ca05e5bba0.png)
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
OUTPUT
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
![그림10](https://user-images.githubusercontent.com/52376448/64926493-121aea00-d839-11e9-8181-859337f9ae70.png)
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
![image](https://user-images.githubusercontent.com/52376448/71621048-832bb500-2c10-11ea-991e-2d8f3959f3ea.png)
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
![image](https://user-images.githubusercontent.com/52376448/71621078-b66e4400-2c10-11ea-86e1-74429802d8fa.png)
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
![image](https://user-images.githubusercontent.com/52376448/71621127-e3baf200-2c10-11ea-85e5-2faefe2794f9.png)
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
![그림1](https://user-images.githubusercontent.com/52376448/64976018-4bac2d80-d8eb-11e9-909d-39984fe53647.png)
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71621170-21b81600-2c11-11ea-876f-795773d8b27c.png)
method | description |
---|---|
text() | 체크 박스의 라벨 텍스트를 반환합니다. |
setText() | 체크 박스의 라벨 텍스트를 설정합니다. |
isChecked() | 체크 박스의 상태를 반환합니다. (True/False) |
checkState() | 체크 박스의 상태를 반환합니다. (2/1/0) |
toggle() | 체크 박스의 상태를 변경합니다. |
pressed() | 체크 박스를 누를 때 신호를 발생합니다. |
released() | 체크 박스에서 뗄 때 신호를 발생합니다. |
clicked() | 체크 박스를 클릭할 때 신호를 발생합니다. |
stateChanged() | 체크 박스의 상태가 바뀔 때 신호를 발생합니다. |
signal | description |
---|---|
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
![캡처](https://user-images.githubusercontent.com/52376448/64978088-aba4d300-d8ef-11e9-8ed7-d8b9b23e348c.JPG)
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
![그림2](https://user-images.githubusercontent.com/52376448/64977429-561bf680-d8ee-11e9-93e7-448b57558a43.png)
method | description |
---|---|
signal | description |
---|---|
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
![그림3](https://user-images.githubusercontent.com/52376448/64979188-2b33a180-d8f2-11e9-9f3a-c3cbc8c4e164.png)
constant | value | description |
---|---|---|
QLineEdit.Normal | 0 | 입력된 문자를 표시합니다. (기본값) |
QLineEdit.NoEcho | 1 | 문자열을 표시하지 않습니다. 이 설정은 비밀번호의 글자수도 공개하지 않을 때 유용합니다. |
QLineEdit.Password | 2 | 입력된 문자 대신 비밀번호 가림용 문자를 표시합니다. |
QLineEdit.PasswordEchoOnEdit | 3 | 입력할 때만 문자를 표시하고, 수정 중에는 다른 문자를 표시합니다. |
method | description |
---|---|
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
![그림11](https://user-images.githubusercontent.com/52376448/64956693-2c4ed980-d8c6-11e9-860d-024b4a1cabec.png)
constant | value | description |
---|---|---|
QSlider.NoTicks | 0 | 틱을 표시하지 않습니다. |
QSlider.TicksAbove | 1 | 틱을 (수평) 슬라이더 위쪽에 표시합니다. |
QSlider.TicksBelow | 2 | 틱을 (수평) 슬라이더 아래쪽에 표시합니다. |
QSlider.TicksBothSides | 3 | 틱을 (수평) 슬라이더 양쪽에 표시합니다. |
QSlider.TicksLeft | TicksAbove | 틱을 (수직) 슬라이더 왼쪽에 표시합니다. |
QSlider.TicksRight | TicksBelow | 틱을 (수직) 슬라이더 오른쪽에 표시합니다. |
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71621222-65128480-2c11-11ea-96ad-9859709d0a95.png)
official API(QSlider)
& official API(QDial)
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71621240-83788000-2c11-11ea-84e1-98ce247feb23.png)
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71621262-a60a9900-2c11-11ea-8f9a-935dd8ac2593.png)
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71679448-f711bd00-2dca-11ea-9bfe-3d9e316ae73e.png)
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71621310-eff37f00-2c11-11ea-8c8f-6a89530d4b63.png)
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
![image](https://user-images.githubusercontent.com/52376448/71621333-0c8fb700-2c12-11ea-93c4-35eca0387c41.png)
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71621355-2af5b280-2c12-11ea-865a-3d9da7cdade2.png)
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71621368-452f9080-2c12-11ea-95d4-418cdfaffe90.png)
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71621383-60020500-2c12-11ea-94cd-0ee204152590.png)
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71621409-790ab600-2c12-11ea-8173-d779fe16adab.png)
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71621440-98a1de80-2c12-11ea-8670-07053d5c523b.png)
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71621459-b111f900-2c12-11ea-9faf-394db79fc253.png)
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71621469-cb4bd700-2c12-11ea-8b4a-ea3f17062513.png)
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71621493-fdf5cf80-2c12-11ea-9802-aab367024659.png)
method | description |
---|---|
signal | description |
---|---|
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
![image](https://user-images.githubusercontent.com/52376448/71621514-16fe8080-2c13-11ea-9a9c-16770fb1dabb.png)
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
![image](https://user-images.githubusercontent.com/52376448/71621542-3eede400-2c13-11ea-9b24-15dd2e8f9d8a.png)
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
![image](https://user-images.githubusercontent.com/52376448/71621563-6644b100-2c13-11ea-8490-efe47316f5f8.png)
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
![image](https://user-images.githubusercontent.com/52376448/71621585-84121600-2c13-11ea-8cdf-998a3131f5e6.png)
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
![image](https://user-images.githubusercontent.com/52376448/71621611-a9068900-2c13-11ea-9faf-99c38ecac30b.png)
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
![image](https://user-images.githubusercontent.com/52376448/71621641-d2271980-2c13-11ea-8d52-5a459e517b6f.png)
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
![image](https://user-images.githubusercontent.com/52376448/71621669-fdaa0400-2c13-11ea-9a96-1208ec28ff06.png)
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
![image](https://user-images.githubusercontent.com/52376448/71621696-28945800-2c14-11ea-9ba6-774ff7e3a146.png)
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
![image](https://user-images.githubusercontent.com/52376448/71621725-6abd9980-2c14-11ea-96f7-f0c19689afbf.png)
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
![image](https://user-images.githubusercontent.com/52376448/71621760-917bd000-2c14-11ea-83d7-8228a036baeb.png)
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
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
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
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
List of posts followed by this article
Reference
OUTPUT
method | description |
---|---|
signal | description |
---|---|