상세 컨텐츠

본문 제목

[PySide6] QTextBrowser 사용하기

pyside6

by 빨간눈동자 2021. 9. 3. 11:53

본문

반응형

Text를 표시하기 위해서는 다양한 방법이 존재한다.
QTextEdit를 사용하여 편집이 가능한 Rich Text(서식이 있는)를 표현할 수 있다. 또한 setReadOnly()를 사용하여 편집을 막을 수도 있다.
짧은 Rich Text를 표시하기 위해서는 QLabel을 사용할 수도 있다.
QLabel은 한줄씩 표시할 수 있는 반면, QTextBrower는 Rich text, Hyper text를 여러줄 표시할 수 있다.

예제를 살펴보도록 하자. 이번에 살펴볼 예제에서는 글자색을 선택하기 위해 이전에 살펴보았던 QFrame/QColorDialog과 사용자 signal/slot의 예제를 참고하였다.

https://answer-me.tistory.com/47

 

[PySide6] QFrame과 QColorDialog 사용하기

Unbuntu 환경에서도 Window 그림판과 비슷한 기능을 하는 "KolourPaint" 프로그램이 존재한다. 이 프로그램에는 글씨 및 도형(Object) 색상의 변경을 지원하는 기능이 존재한다. ( 노란색 Box ) 해당 기능을

answer-me.tistory.com

 

import sys
from PySide6.QtWidgets import *
from PySide6.QtGui import QColor
from PySide6.QtCore import QObject, Signal, QEvent

def mySignal(widget):
    class Filter(QObject):
        clicked = Signal()
        def eventFilter(self, obj, event):
            if obj == widget:
                if event.type() == QEvent.MouseButtonRelease:
                    if obj.rect().contains(event.pos()):
                        self.clicked.emit()
                        return True 	
            return False
    
    filter=Filter(widget)
    widget.installEventFilter(filter)
    return filter.clicked
	
class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    
    def initUI(self):
        self.le = QLineEdit()
        self.le.setPlaceholderText('Enter any words')
        self.btn = QPushButton('save')
        self.btn.clicked.connect(self.updateTb)
        self.tb = QTextBrowser()
        self.tb.setAcceptRichText(True)
        self.checkBox1 = QCheckBox('Under line',self)
        self.checkBox2 = QCheckBox('Italic',self)
        self.checkBox1.toggled.connect(self.Bold)
        self.checkBox2.toggled.connect(self.Italic)
        self.col = QColor(0x00, 0x00, 0x00)
        self.frm = QFrame(self)
        self.frm.setStyleSheet('QWidget { background-color: %s }' % self.col.name())
        self.frm.setGeometry(0, 0, 10, 10) 
        mySignal(self.frm).connect(self.showDialog)
        
        self.groupBoxLayout = QVBoxLayout() # Vertical layout 생성
        self.groupBoxLayout.addWidget(self.checkBox1)
        self.groupBoxLayout.addWidget(self.checkBox2)
        self.groupBoxLayout.addWidget(self.frm)
        self.grid = QGridLayout()
        self.grid.addWidget(self.le, 0, 0, 1, 3)
        self.grid.addWidget(self.btn, 0, 3, 1, 1)
        self.grid.addWidget(self.tb, 1, 0, 1, 3)
        self.grid.addLayout(self.groupBoxLayout, 1, 3, 1, 3)
        self.setLayout(self.grid)
        self.setWindowTitle('History')
        self.setGeometry(100, 100, 350, 150)
        self.show()
    
    def updateTb(self):
        self.tb.append(self.le.text())
    def Bold(self):
        self.tb.setFontUnderline(True) 
    def Italic(self):
        self.tb.setFontItalic(True)
    def showDialog(self):
        col = QColorDialog.getColor() 
        if col.isValid():
            self.frm.setStyleSheet('QWidget { background-color: %s }' % col.name())
            self.tb.setTextColor(col) 

if __name__ == '__main__':
	app = QApplication(sys.argv)
	ex = MyWidget()
	sys.exit(app.exec_())

 


이제 line by line으로 살펴보자.

self.le = QLineEdit() self.le.setPlaceholderText('Enter any words')


QLineEdit를 생성하고, PlaceholderText를 설정한다. (placeholder : text를 입력하기 전에 보이는 guide 문구.. )

self.btn = QPushButton('save') self.btn.clicked.connect(self.updateTb) def updateTb(self): self.tb.append(self.le.text())


PushButton을 생성하고, signal(clicked)과 slot(event handler) 를 연결해준다. PushButton을 click하면 QTextBrower에 text를 append한다.

self.tb = QTextBrowser() self.tb.setAcceptRichText(True)


QTextBrower를 생성하고 RichText를 사용할 수 있도록 설정해준다. ( RichText : 서식이 있는 Text )

self.checkBox1 = QCheckBox('Under line',self) self.checkBox2 = QCheckBox('Italic',self) self.checkBox1.toggled.connect(self.Bold) self.checkBox2.toggled.connect(self.Italic) def Bold(self): self.tb.setFontUnderline(True) def Italic(self): self.tb.setFontItalic(True)


Checkbox를 생성하고 signal/slot을 연결하였다.

self.grid = QGridLayout() self.grid.addWidget(self.le, 0, 0, 1, 3) self.grid.addWidget(self.btn, 0, 3, 1, 1) self.grid.addWidget(self.tb, 1, 0, 1, 3) self.grid.addLayout(self.groupBoxLayout, 1, 3, 1, 3) self.setLayout(self.grid)


QGridLayout를 설정하고, QLineEdit, QPushButton, QTextBrower, QVBoxLayout를 추가한다.


QColorDialog / QFrame 관련 코드는 위에 언급된 Link를 참조!!

반응형

'pyside6' 카테고리의 다른 글

[PySide6] Event 다루기  (0) 2021.09.14
[PySide6] QComboBox 사용하기  (2) 2021.09.09
[PySide6] QTextEdit 사용하기  (1) 2021.09.03
[PySide6] Style sheet 사용법(WIP)  (0) 2021.09.03
[PySide6] QDockWidget 사용하기  (0) 2021.09.03

관련글 더보기