Appia의 IT세상

파이썬[Python GUI, PyQt5 Tutorial 018] 텍스트(QText) 편집 공간 만들기 본문

Python/Python PyQt5 (GUI)

파이썬[Python GUI, PyQt5 Tutorial 018] 텍스트(QText) 편집 공간 만들기

Appia 2020. 7. 4. 07:05
반응형

파이썬[Python GUI, PyQt5 Tutorial 018] 텍스트(QText) 편집 공간 만들기

 

이번 포스팅에서는 텍스트를 편집할 수 있는 공간인 QText에 대해서 생성하고, 관련된 부분에 대해서 이야기를 해보고자 합니다. 물론, 앞서서 위젯(Widget)에 대해서 살펴봤습니다. 하지만, 노트 패드등과 같이 텍스트를 입력하거나, 편집할 수 있는 부분을 만들기 위해서는 QText라는 위젯을 추가해줘야 합니다. 대부분의 위젯은 다음과 같은 모양입니다.

PyQt5 QText 

관련해서 코드 부분에서 한번 살펴보도록 하겠습니다. 

import sys
 
from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QVBoxLayout
 
 
class QtGUI(QWidget):
 
 
    def __init__(self):
 
        super().__init__()
 
        self.text = QTextEdit()
        
        self.text.setAcceptRichText(True)
 
        vbox = QVBoxLayout()
        
        vbox.addWidget(self.text)
        
        vbox.addStretch()
 
        self.setLayout(vbox)
 
        self.setWindowTitle('QTextEdit')
        
        self.setGeometry(300300300200)
        
        self.show()
 
 
if __name__ == '__main__':
 
    app = QApplication(sys.argv)
 
    ex = QtGUI()
 
    app.exec_()
cs

 

 일단 위의 전체 코드에서 일정 부분에 대해서 간단한 설명을 추가하도록 하겠습니다. 

import sys
 
from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QVBoxLayout
cs

위에서 QTextEdit부분을 통해서 위젯을 추가할 것입니다. 따라서, QTextEdit 부분을 추가해주셔야 합니다. 

 

      self.text = QTextEdit()
      
      self.text.setAcceptRichText(True)
 
      vbox = QVBoxLayout()
      
      vbox.addWidget(self.text)
      
      vbox.addStretch()
 
      self.setLayout(vbox)
cs

일단, QTextEdit()을 통해서 Text를 입력할 수 있는 공간을 생성합니다. 그 다음에 중요한 것은 setAcceptRichText(True) 부분입니다. 여기에서 RichText와 PlainText를 비교하면서 살펴보겠습니다. 

 

일단, PlainText는 그냥 글자 그 자체입니다. 아무런 특징 없이 그냥 글자를 의미합니다. 즉, 아무런 서식 및 폰트 등이 적용 되지 않은 것을 의미합니다. 

그럼, RichText는 무엇일까요? 바로, 글꼴 등 서식등이 적용되는 것을 의믜합니다. 위에서는 보이는 setAcceptRichText는 바로 이렇게 굻게, 글꼴등이 적용되는 것을 의미합니다. 

Rich Text 적용 예 

실제 위의 코드를 실행하면 다음과 같은 결과가 나타납니다. 

물론, 다음과 같은 이벤트를 연결할 수 있습니다. 

cursorPositionChanged 현재 커서 위치가 바뀔경우 
selectionChanged 선택 범위가 변경되었을 경우 
textChanged Text를 변경이 되었을 경우

그럼 다음 코드에 이벤트를 한번 연결해보겠습니다. 

 

import sys
 
from PyQt5.QtWidgets import QApplication,QLabel, QWidget, QTextEdit, QVBoxLayout
 
 
class QtGUI(QWidget):
 
 
    def __init__(self):
 
        super().__init__()
 
        self.text = QTextEdit()
        
        self.text.setAcceptRichText(True)
        
        self.teLabel = QLabel(self)
 
        vbox = QVBoxLayout()
        
        vbox.addWidget(self.teLabel)
        
        vbox.addWidget(self.text)
        
        vbox.addStretch()
 
        self.setLayout(vbox)
 
        self.text.textChanged.connect(self.text_changed)
        
        self.setWindowTitle('QTextEdit')
        
        self.setGeometry(300300300200)
        
        self.show()
 
 
    def text_changed(self):
    
        self.teLabel.setText(self.text.toPlainText())
 
 
if __name__ == '__main__':
 
    app = QApplication(sys.argv)
 
    ex = QtGUI()
 
    app.exec_()
cs

 

위에 코드에서 크게 2가지 부분이 추가 되었습니다. 다음과 같이 self.text.textChanged.connect()를 통해서 text가 변경되었을 경우 라벨에 텍스트가 출력되게 합니다. 

이벤트 연결 결과 

이와 같은 형태로 한번 코딩을 해봤습니다. 파이썬[Python GUI, PyQt5 Tutorial 017] 텍스트(QText) 편집 공간 만들기라는 주제로 오늘은 포스팅을 해봤습니다. QText에 입력된 글자들을 라벨에 출력되게 합니다. 혹시 궁금하신점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다. 

반응형
Comments