ㅇ 일 자 : 2026년 6월 5일(금)
1. Resource 이해하기
1.1. GUI 프로그램 리소스? Graphical User Interface
GUI 프로그램에서 리소스(Resource)란 프로그램 코드(로직) 자체를 제외한 시각적 요소와 외부 데이터를 통칭, 주로 이미지, 아이콘, 폰트, 오디오, 텍스트(문구) 등이 포함되며, 프로그램 실행 시 불러와 화면에 렌더링되거나 동작을 돕는 데이터 자원이다.
2. Python 환경에서 리소스 예제 실습

3. PyQT 리소스 디자인 "메모장" 예제 실습
(1) .ui 파일에서 디자인 요소를 입력 : 텍스트, 개체이름, 도구설명, 아이콘테마, 확인, 단축키 누르기, 메뉴역할 등

(2) 그림아이콘도 액션 애디터에서 선택하여 설정 가능

(3) 액션 애디터에서 텍스트만 입력하면 name 자동입력, 단축키(Shortcut)는 입력칸에 단축키를 키보드로 입력시 자동입력됨

(4) 액션 요소들은 Property Editor (노란 항목들)에서 세부 사항을 클릭하여 각각 수정할 수 있다.

4. Python 환경에서 "메모장" 예제 실습 (이미지 미포함)


메모장 만들기 예제 실습 화면 (이미지를 코드에 포함하여 작성한 경우)
※ 소스 코드
① dmainwindow.py
# "" 메모장 이미지 포함 예제 실습 패키지 임"""
import sys
from PySide6.QtWidgets import QApplication, QMainWindow
from ui_form import Ui_MainWindow
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
if __name__ == "__main__":
app = QApplication(sys.argv)
widget = MainWindow()
widget.show()
sys.exit(app.exec())
② ui_form.py ※ 프로그램에서 기호 및 이모티콘 이미지가 어떤 로직에 의해 구현되는지 이해하고, 인공지능 응용 참고
# "" 메모장 이미지 포함 예제 실습 패키지 임"""
## Form generated from reading UI file 'form.ui'
## Created by: Qt User Interface Compiler version 6.10.1
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QAction, QBrush, QColor, QConicalGradient,
QCursor, QFont, QFontDatabase, QGradient,
QIcon, QImage, QKeySequence, QLinearGradient,
QPainter, QPalette, QPixmap, QRadialGradient,
QTransform)
from PySide6.QtWidgets import (QApplication, QMainWindow, QMenu, QMenuBar,
QSizePolicy, QStatusBar, QWidget)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(700, 500)
self.actionNew = QAction(MainWindow)
self.actionNew.setObjectName(u"actionNew")
self.actionOpen = QAction(MainWindow)
self.actionOpen.setObjectName(u"actionOpen")
self.actionSave = QAction(MainWindow)
self.actionSave.setObjectName(u"actionSave")
self.actionPrint = QAction(MainWindow)
self.actionPrint.setObjectName(u"actionPrint")
self.actionPrint_Preview = QAction(MainWindow)
self.actionPrint_Preview.setObjectName(u"actionPrint_Preview")
self.actionExport_PDF = QAction(MainWindow)
self.actionExport_PDF.setObjectName(u"actionExport_PDF")
self.actionClose = QAction(MainWindow)
self.actionClose.setObjectName(u"actionClose")
self.actionUndo = QAction(MainWindow)
self.actionUndo.setObjectName(u"actionUndo")
self.actionRedo = QAction(MainWindow)
self.actionRedo.setObjectName(u"actionRedo")
self.actionCut = QAction(MainWindow)
self.actionCut.setObjectName(u"actionCut")
self.actionCopy = QAction(MainWindow)
self.actionCopy.setObjectName(u"actionCopy")
self.actionPaste = QAction(MainWindow)
self.actionPaste.setObjectName(u"actionPaste")
self.actionBold = QAction(MainWindow)
self.actionBold.setObjectName(u"actionBold")
self.actionItalic = QAction(MainWindow)
self.actionItalic.setObjectName(u"actionItalic")
self.actionUnderline = QAction(MainWindow)
self.actionUnderline.setObjectName(u"actionUnderline")
self.actionLeft = QAction(MainWindow)
self.actionLeft.setObjectName(u"actionLeft")
self.actionRight = QAction(MainWindow)
self.actionRight.setObjectName(u"actionRight")
self.actionCenter = QAction(MainWindow)
self.actionCenter.setObjectName(u"actionCenter")
self.actionJustify = QAction(MainWindow)
self.actionJustify.setObjectName(u"actionJustify")
self.actionFont = QAction(MainWindow)
self.actionFont.setObjectName(u"actionFont")
self.actionColor = QAction(MainWindow)
self.actionColor.setObjectName(u"actionColor")
self.actionAbout_App = QAction(MainWindow)
self.actionAbout_App.setObjectName(u"actionAbout_App")
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName(u"menubar")
self.menubar.setGeometry(QRect(0, 0, 700, 22))
self.menuFile = QMenu(self.menubar)
self.menuFile.setObjectName(u"menuFile")
self.menuEdit = QMenu(self.menubar)
self.menuEdit.setObjectName(u"menuEdit")
self.menuFormat = QMenu(self.menubar)
self.menuFormat.setObjectName(u"menuFormat")
self.menuAbout = QMenu(self.menubar)
self.menuAbout.setObjectName(u"menuAbout")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QStatusBar(MainWindow)
self.statusbar.setObjectName(u"statusbar")
MainWindow.setStatusBar(self.statusbar)
self.menubar.addAction(self.menuFile.menuAction())
self.menubar.addAction(self.menuEdit.menuAction())
self.menubar.addAction(self.menuFormat.menuAction())
self.menubar.addAction(self.menuAbout.menuAction())
self.menuFile.addAction(self.actionNew)
self.menuFile.addAction(self.actionOpen)
self.menuFile.addAction(self.actionSave)
self.menuFile.addSeparator()
self.menuFile.addAction(self.actionPrint)
self.menuFile.addAction(self.actionPrint_Preview)
self.menuFile.addAction(self.actionExport_PDF)
self.menuFile.addSeparator()
self.menuFile.addAction(self.actionClose)
self.menuEdit.addAction(self.actionUndo)
self.menuEdit.addAction(self.actionRedo)
self.menuEdit.addSeparator()
self.menuEdit.addAction(self.actionCut)
self.menuEdit.addAction(self.actionCopy)
self.menuEdit.addAction(self.actionPaste)
self.menuFormat.addAction(self.actionBold)
self.menuFormat.addAction(self.actionItalic)
self.menuFormat.addAction(self.actionUnderline)
self.menuFormat.addSeparator()
self.menuFormat.addAction(self.actionLeft)
self.menuFormat.addAction(self.actionRight)
self.menuFormat.addAction(self.actionCenter)
self.menuFormat.addAction(self.actionJustify)
self.menuFormat.addSeparator()
self.menuFormat.addAction(self.actionFont)
self.menuFormat.addAction(self.actionColor)
self.menuAbout.addAction(self.actionAbout_App)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"🖥️ MainWindow", None))
self.actionNew.setText(QCoreApplication.translate("MainWindow", u"📄 New", None))
#if QT_CONFIG(shortcut)
self.actionNew.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+N", None))
#endif // QT_CONFIG(shortcut)
self.actionOpen.setText(QCoreApplication.translate("MainWindow", u"📂 Open", None))
#if QT_CONFIG(shortcut)
self.actionOpen.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+O", None))
#endif // QT_CONFIG(shortcut)
self.actionSave.setText(QCoreApplication.translate("MainWindow", u"💾 Save", None))
#if QT_CONFIG(shortcut)
self.actionSave.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+S", None))
#endif // QT_CONFIG(shortcut)
self.actionPrint.setText(QCoreApplication.translate("MainWindow", u"🖨️ Print", None))
#if QT_CONFIG(shortcut)
self.actionPrint.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+P", None))
#endif // QT_CONFIG(shortcut)
self.actionPrint_Preview.setText(QCoreApplication.translate("MainWindow", u"🔍 Print Preview", None))
#if QT_CONFIG(shortcut)
self.actionPrint_Preview.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+Shift+P", None))
#endif // QT_CONFIG(shortcut)
self.actionExport_PDF.setText(QCoreApplication.translate("MainWindow", u"📥 Export PDF", None))
#if QT_CONFIG(shortcut)
self.actionExport_PDF.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+E", None))
#endif // QT_CONFIG(shortcut)
self.actionClose.setText(QCoreApplication.translate("MainWindow", u"❌ Close", None))
#if QT_CONFIG(shortcut)
self.actionClose.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+Q, Return", None))
#endif // QT_CONFIG(shortcut)
self.actionUndo.setText(QCoreApplication.translate("MainWindow", u"↩️ Undo", None))
#if QT_CONFIG(shortcut)
self.actionUndo.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+Z", None))
#endif // QT_CONFIG(shortcut)
self.actionRedo.setText(QCoreApplication.translate("MainWindow", u"↪️ Redo", None))
#if QT_CONFIG(shortcut)
self.actionRedo.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+Y", None))
#endif // QT_CONFIG(shortcut)
self.actionCut.setText(QCoreApplication.translate("MainWindow", u"✂️ Cut", None))
#if QT_CONFIG(shortcut)
self.actionCut.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+X", None))
#endif // QT_CONFIG(shortcut)
self.actionCopy.setText(QCoreApplication.translate("MainWindow", u"📄 Copy", None))
#if QT_CONFIG(shortcut)
self.actionCopy.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+C", None))
#endif // QT_CONFIG(shortcut)
self.actionPaste.setText(QCoreApplication.translate("MainWindow", u"📋 Paste", None))
#if QT_CONFIG(shortcut)
self.actionPaste.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+V", None))
#endif // QT_CONFIG(shortcut)
self.actionBold.setText(QCoreApplication.translate("MainWindow", u"<b>B</b> Bold", None))
#if QT_CONFIG(shortcut)
self.actionBold.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+B", None))
#endif // QT_CONFIG(shortcut)
self.actionItalic.setText(QCoreApplication.translate("MainWindow", u"<i>I</i> Italic", None))
#if QT_CONFIG(shortcut)
self.actionItalic.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+I", None))
#endif // QT_CONFIG(shortcut)
self.actionUnderline.setText(QCoreApplication.translate("MainWindow", u"<u>U</u> Underline", None))
#if QT_CONFIG(shortcut)
self.actionUnderline.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+E", None))
#endif // QT_CONFIG(shortcut)
self.actionLeft.setText(QCoreApplication.translate("MainWindow", u"⬅️ Left", None))
#if QT_CONFIG(shortcut)
self.actionLeft.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+L", None))
#endif // QT_CONFIG(shortcut)
self.actionRight.setText(QCoreApplication.translate("MainWindow", u"➡️ Right", None))
#if QT_CONFIG(shortcut)
self.actionRight.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+R", None))
#endif // QT_CONFIG(shortcut)
self.actionCenter.setText(QCoreApplication.translate("MainWindow", u"↕️ Center", None))
#if QT_CONFIG(shortcut)
self.actionCenter.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+K", None))
#endif // QT_CONFIG(shortcut)
self.actionJustify.setText(QCoreApplication.translate("MainWindow", u"↔️ Justify", None))
#if QT_CONFIG(shortcut)
self.actionJustify.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+J", None))
#endif // QT_CONFIG(shortcut)
self.actionFont.setText(QCoreApplication.translate("MainWindow", u"🔤 Font", None))
self.actionColor.setText(QCoreApplication.translate("MainWindow", u"🎨 Color", None))
self.actionAbout_App.setText(QCoreApplication.translate("MainWindow", u"ℹ️ About App", None))
self.menuFile.setTitle(QCoreApplication.translate("MainWindow", u"📁 File", None))
self.menuEdit.setTitle(QCoreApplication.translate("MainWindow", u"📝 Edit", None))
self.menuFormat.setTitle(QCoreApplication.translate("MainWindow", u"🛠️ Format", None))
self.menuAbout.setTitle(QCoreApplication.translate("MainWindow", u"❓ About", None))
5. 가상환경 채팅 환경설정 (Ollama) 및 준비
가. 환경설정 (터미널에서 설정하기 실습)
ollama -v (버젼 확인), sudo systemctl status ollama(실행상태 확인), ollama pull llama3.2:3b (실습모델 다운로드),
ollama run llama3.2:3b (터미널 모델 응답 확인), curl 활용 api/chat 호출 결과 확인, test_ollama.py (호출 결과 확인)
나. 파이썬 환경에서 가상환경 폴더 설정
다. 환경설정 후 모델응답 확인 화면

'학습 로그 > Python3' 카테고리의 다른 글
| D+43 [Python] PySide6 & 가상의 LLM 대화앱 예제 실습 (0) | 2026.06.09 |
|---|---|
| D+42 [Python] hashlib 뭐야? 어떻게 활용해야 할까? (0) | 2026.06.08 |
| D+39 [아두이노] Arduino & AI를 응용한 "프로그램 기획서" 작성 예시 (0) | 2026.06.02 |
| D+36+[Python] 오버로딩,오버라이딩 (0) | 2026.06.02 |
| D+36 [Layout] .py 파일분리 왜 할까 ? 레이아웃 종합 예제 학습(2) (0) | 2026.05.28 |