Text를 표시하기 위해서는 다양한 방법이 존재한다.
QTextEdit를 사용하여 편집이 가능한 Rich Text(서식이 있는)를 표현할 수 있다. 또한 setReadOnly()를 사용하여 편집을 막을 수도 있다.
짧은 Rich Text를 표시하기 위해서는 QLabel을 사용할 수도 있다.
QLabel은 한줄씩 표시할 수 있는 반면, QTextBrower는 Rich text, Hyper text를 여러줄 표시할 수 있다.
예제를 살펴보도록 하자. 이번에 살펴볼 예제에서는 글자색을 선택하기 위해 이전에 살펴보았던 QFrame/QColorDialog과 사용자 signal/slot의 예제를 참고하였다.
https://answer-me.tistory.com/47
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] 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 |