커서한테 원하는거 차례차례 몇번 얘기하니까 만들어주네...
짤에서 보이듯이 찐빠나는 부분이 좀 있긴 한데 사용하기엔 문제없는듯
진짜 세상 좋아졌다
파이썬 1도 모르는데 필요한거 이렇게 금방 만들고
혹시 이거라도 필요한 사람 있으면 쓰셈
아래 스크립트 복붙해서 .py 파일로 저장하고
파이썬 깔고 명령프롬프트에 pip install PyQt5==5.15.9 이거 한번 하고 실행하면됨
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QTextEdit,
QVBoxLayout, QWidget, QPushButton, QFileDialog,
QHBoxLayout, QLabel, QSpinBox, QComboBox,
QScrollArea, QFrame, QGridLayout)
from PyQt5.QtGui import QFont, QFontDatabase
from PyQt5.QtCore import Qt
class FontPreviewWidget(QFrame):
def __init__(self, parent=None):
super().__init__(parent)
self.setFrameStyle(QFrame.Box | QFrame.Raised)
self.setLineWidth(1)
self.layout = QVBoxLayout(self)
# 폰트 이름 레이블
self.font_label = QLabel()
self.layout.addWidget(self.font_label)
# 미리보기 텍스트
self.preview_text = QTextEdit()
self.preview_text.setReadOnly(True)
self.preview_text.setMinimumHeight(200)
self.layout.addWidget(self.preview_text)
class FontTextEditor(QMainWindow):
def __init__(self):
super().__init__()
self.fonts = {} # 폰트 정보를 저장할 딕셔너리
self.preview_widgets = {} # 폰트별 미리보기 위젯 저장
self.initUI()
def initUI(self):
self.setWindowTitle('폰트 텍스트 에디터')
self.setGeometry(100, 100, 2560, 1600)
# 중앙 위젯 설정
central_widget = QWidget()
self.setCentralWidget(central_widget)
layout = QVBoxLayout(central_widget)
layout.setSpacing(20)
# 상단 컨트롤 레이아웃
control_layout = QHBoxLayout()
control_layout.setSpacing(20)
# 폰트 추가 버튼
self.add_font_button = QPushButton('폰트 추가', self)
self.add_font_button.clicked.connect(self.add_fonts)
control_layout.addWidget(self.add_font_button)
# 폰트 크기 조절
font_size_layout = QHBoxLayout()
font_size_label = QLabel('폰트 크기:', self)
self.font_size_spin = QSpinBox(self)
self.font_size_spin.setRange(8, 72)
self.font_size_spin.setValue(12)
self.font_size_spin.valueChanged.connect(self.update_font_size)
font_size_layout.addWidget(font_size_label)
font_size_layout.addWidget(self.font_size_spin)
control_layout.addLayout(font_size_layout)
layout.addLayout(control_layout)
# 메시지 입력 영역
message_layout = QVBoxLayout()
message_label = QLabel('메시지 입력:', self)
self.message_edit = QTextEdit(self)
self.message_edit.setMaximumHeight(100)
self.message_edit.setFont(QFont("맑은 고딕", 10)) # Windows 기본 폰트로 설정
self.message_edit.textChanged.connect(self.update_previews)
message_layout.addWidget(message_label)
message_layout.addWidget(self.message_edit)
layout.addLayout(message_layout)
# 미리보기 영역
preview_label = QLabel('폰트 미리보기:', self)
layout.addWidget(preview_label)
# 스크롤 가능한 미리보기 영역
scroll_area = QScrollArea()
scroll_area.setWidgetResizable(True)
scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
scroll_area.setMinimumHeight(1200)
self.preview_container = QWidget()
self.preview_layout = QGridLayout(self.preview_container) # GridLayout으로 변경
self.preview_layout.setSpacing(20)
scroll_area.setWidget(self.preview_container)
layout.addWidget(scroll_area)
# 기본 폰트 설정
self.current_font = None
def create_font(self, font_family, size):
font = QFont(font_family, size)
font.setStyleStrategy(QFont.NoFontMerging) # 폰트 대체 비활성화
return font
def add_fonts(self):
file_names, _ = QFileDialog.getOpenFileNames(
self, '폰트 파일 선택', '', 'TTF Files (*.ttf)')
if file_names:
for file_name in file_names:
font_id = QFontDatabase.addApplicationFont(file_name)
if font_id != -1:
font_family = QFontDatabase.applicationFontFamilies(font_id)[0]
self.fonts[font_family] = file_name
# 새로운 미리보기 위젯 생성
preview_widget = FontPreviewWidget()
preview_widget.font_label.setText(font_family)
font = self.create_font(font_family, self.font_size_spin.value())
preview_widget.preview_text.setFont(font)
self.preview_widgets[font_family] = preview_widget
# GridLayout에 위젯 추가 (3열로 배치)
row = len(self.preview_widgets) // 3
col = len(self.preview_widgets) % 3
self.preview_layout.addWidget(preview_widget, row, col)
def update_font_size(self):
# 모든 미리보기 위젯의 폰트 크기 업데이트
for font_family, preview_widget in self.preview_widgets.items():
font = self.create_font(font_family, self.font_size_spin.value())
preview_widget.preview_text.setFont(font)
def update_previews(self):
message = self.message_edit.toPlainText()
for preview_widget in self.preview_widgets.values():
preview_widget.preview_text.setText(message)
if __name__ == '__main__':
app = QApplication(sys.argv)
editor = FontTextEditor()
editor.show()
sys.exit(app.exec_())
댓글 0