PyQt5를 통해 입력창을 만들어 보겠습니다.
Visual Basic에서는 InputBox로 썼던걸로 기억하는데, 파이썬은 LineEdit이라고 하네요.
사실 UI를 일일이 코딩해 줄 필요는 없습니다. qtdesigner를 사용하시면, 자동으로 만들어 집니다. 각 개체를 함수와 연결만 하시면 됩니다.
저는 제가 공부하느라 일일이 다 만들어 보고 있습니다.
LineEdit은 QLineEdit을 사용하면 됩니다.
전체 코드는 아래와 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
import sys
from PyQt5.QtWidgets import*
from PyQt5.QtCore import*
class TestWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setupUI()
def setupUI(self):
self.setWindowTitle('Test Window')
self.setGeometry(100,100,300,100)
self.label = QLabel('이름 :',self)
self.label.move(20,20)
self.label.resize(150,20)
self.lineEdit = QLineEdit('',self)
self.lineEdit.move(60,20)
self.lineEdit.resize(200,20)
self.lineEdit.textChanged.connect(self.lineEdit_textChanged)
self.statusBar = QStatusBar(self)
self.setStatusBar(self.statusBar)
btnSave = QPushButton('저장',self)
btnSave.move(10,50)
btnSave.clicked.connect(self.btnSave_clicked)
btnClear = QPushButton('초기화',self)
btnClear.move(100,50)
btnClear.clicked.connect(self.btnClear_clicked)
btnQuit = QPushButton('닫기',self)
btnQuit.move(190,50)
btnQuit.clicked.connect(self.btnQuit_clicked)
#함수를 별도로 작성할 필요 없이 btnQuit.clicked.connect(QCoreApplication.instance().quit) 사용해도 됨
def btnSave_clicked(self):
print(self.lineEdit.text())
msg = '저장하시겠습니까?'
msg += '\n이름 : ' + self.lineEdit.text()
buttonReply = QMessageBox.question(self, '저장', msg, QMessageBox.Yes | QMessageBox.No)
if buttonReply == QMessageBox.Yes:
print('Yes clicked')
QMessageBox.about(self,'저장','저장되었습니다.')
self.statusBar.showMessage('저장 되었습니다')
if buttonReply == QMessageBox.No:
print('No clicked')
if buttonReply == QMessageBox.Cancel:
print('Cancel')
def btnClear_clicked(self):
self.lineEdit.clear() # 화면을 초기화
def btnQuit_clicked(self):
self.exit #프로그램 종료
def lineEdit_textChanged(self):
pass
if __name__=='__main__':
app = QApplication(sys.argv)
window = TestWindow()
window.show()
app.exec_()
|
cs |
import sys
from PyQt5.QtWidgets import*
from PyQt5.QtCore import*
'sys'와 'PyQt5.QtWidgets' 모듈을 임포트 합니다.
'PyQt5.QtCore'는 창을 나가려고 버튼을 클릭하였을때 "QCoreApplication.instance().quit"를 사용하려고 임포트 했습니다.
class TestWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setupUI()
항상 그렇듯 윈도루를 class를 이용해서 만듭니다. UI는 setupUI라는 함수를 아래에 만듭니다.
def setupUI(self):
self.setWindowTitle('Test Window')
self.setGeometry(100,100,300,100)
self.label = QLabel('이름 :',self)
self.label.move(20,20)
self.label.resize(150,20)
self.lineEdit = QLineEdit('',self)
self.lineEdit.move(60,20)
self.lineEdit.resize(200,20)
self.lineEdit.textChanged.connect(self.lineEdit_textChanged)
self.statusBar = QStatusBar(self)
self.setStatusBar(self.statusBar)
UI를 Window, Label, lineEdit, StatusBar 까지 구성합니다.
btnSave = QPushButton('저장',self)
btnSave.move(10,50)
btnSave.clicked.connect(self.btnSave_clicked)
btnClear = QPushButton('초기화',self)
btnClear.move(100,50)
btnClear.clicked.connect(self.btnClear_clicked)
btnQuit = QPushButton('닫기',self)
btnQuit.move(190,50)
btnQuit.clicked.connect(self.btnQuit_clicked)
그리고 저장버튼, 초기화버튼, 닫기버튼을 만들고 함수를 연결합니다.
PyQt를 공부하면서 느낀 것 중 하나가 제가 생각하는 코딩 순서와 반대로 진행되는 느낌입니다.
제가 생각하는 순서는 함수를 만들고, UI를 만들어서 각 개체에 연결한 다음 Window Class를 작성하는 순서가 맞는 것 같은데, 완전히 반대 순서네요.
def btnClear_clicked(self):
self.lineEdit.clear() # 화면을 초기화
def btnQuit_clicked(self):
self.exit #프로그램 종료
def lineEdit_textChanged(self):
pass
각 버튼에 들어갈 함수를 작성합니다.
if __name__=='__main__':
app = QApplication(sys.argv)
window = TestWindow()
window.show()
app.exec_()
마지막으로 여기서만 작동 되도록 if문을 써서 작성합니다.
sys.argv는 현재 파이썬 파일 위치이고 이걸 인자로 받아서 QApplication 객체를 생성합니다.
TestWindow() 클래스를 상속받아 window객체 생성후 window.show()로 윈도를 나타냅니다.
그리고 무한루프같이 컴퓨터 화면에 계속 나타나게 하기 위해서 app.exec_() 을 적어줍니다.
실행 시켜보면 아래와 같이 창이 열립니다.
이름을 입력하고 실행시키면 아래와 같이 또 다른 창이 열립니다.
Yes를 누르면 메세지 박스가 나오면서 아래와 같이 보입니다.
복잡하게 보이지만 이해가 어려울 부분은 없는 것 같아요.
개인적으로 상당히 재미있었습니다.
'파이썬(Python) > 파이썬 GUI(PyQt5 & tkinter)' 카테고리의 다른 글
PyQt5 - QSpinBox(스핀박스) (0) | 2020.12.10 |
---|---|
PyQt5 - Radio Button(라디오 버튼) 만들기 (0) | 2020.12.07 |
PyQt5 - QPushButton, QLabel 만들기 (0) | 2020.12.05 |
PyQt5 - 윈도우화면에 QPushButton 추가하기 (0) | 2020.12.04 |
PyQt5- QMainWindow 클래스를 이용한 간단한 윈도우 만들기 (2) | 2020.11.21 |
댓글