PySide2로 간단한 Calcultor.exe 만들기

Jay
7 min readJan 3, 2021
pip install PySide2 PyInstaller

먼저 파이썬 설치 및 위 두가지 라이브러리를 설치한다.

1. main.ui

QtDesigner를 실행하여 아래와 같이 ui를 구성하고 저장한다.

10은 Home을 누르면 dropdown에 Quit으로 나옴
객체 탐색기

2. resources.qrc

QtDesigner에 리소스 편집기에 icon과 ui를 등록한다.

순서대로 추가해주고

메인 윈도우 속성을 속성편집기에서 아래처럼 수정해준다. 여기서는 무료로 제공되는 burning.ico를 다운받아서 사용하였다.

Title, Icon 수정하고 저장해준다. (Ctrl+S)
미리보기(Ctrl+R): 반영된 모습

3. resources.py

main.py 에서 ui 및 icon등의 리소소를 불러오기위해서는 아래 명령어로 컴파일을 해주어야한다.

pyside2-rcc resources.qrc -o resources.py

4. func.py

계산기에서 사용할 메소드들을 func.py 에 구성해준다

def add(x, y):
return x+y
def sub(x, y):
return x-y
def mul(x, y):
return x*y
def div(x, y):
return x/y
def pow(x, y):
return x**y

5. main.py

아래와 같이 import resources import func 를 통해서 리소스와 메소드를 불러오고, ui의 object들에 기능을 부여해준다.

from PySide2 import QtWidgets, QtGui, QtCore, QtXml, QtUiTools
import sys
import resources
import func
loader = QtUiTools.QUiLoader()class MainWindow(QtCore.QObject):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__()
self.ui = loader.load(':/ui/main.ui', None)
self.ui.show()
self.setup_ui()
def setup_ui(self):
self.ui.action_Quit.triggered.connect(app.quit)
self.ui.pushButton_add.clicked.connect(self.add)
self.ui.pushButton_sub.clicked.connect(self.sub)
self.ui.pushButton_mul.clicked.connect(self.mul)
self.ui.pushButton_div.clicked.connect(self.div)
self.ui.pushButton_pow.clicked.connect(self.pow)
def add(self):
x = float(self.ui.lineEdit_x.text())
y = float(self.ui.lineEdit_y.text())
z = func.add(x, y)
self.ui.lineEdit_z.setText(str(z))
def sub(self):
x = float(self.ui.lineEdit_x.text())
y = float(self.ui.lineEdit_y.text())
z = func.sub(x, y)
self.ui.lineEdit_z.setText(str(z))
def mul(self):
x = float(self.ui.lineEdit_x.text())
y = float(self.ui.lineEdit_y.text())
z = func.mul(x, y)
self.ui.lineEdit_z.setText(str(z))
def div(self):
x = float(self.ui.lineEdit_x.text())
y = float(self.ui.lineEdit_y.text())
z = func.div(x, y)
self.ui.lineEdit_z.setText(str(z))
def pow(self):
x = float(self.ui.lineEdit_x.text())
y = float(self.ui.lineEdit_y.text())
z = func.pow(x, y)
self.ui.lineEdit_z.setText(str(z))
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
app.setWindowIcon(QtGui.QIcon(':/icon/counter.ico'))
main = MainWindow()
sys.exit(app.exec_())

콘솔에서 실행

python main.py
1) *를 클릭하여 곱셈을 연산함; 2) quit을 누르면 app종료

6. Calculator.exe

PyInstaller에 플래그를 넣어서 아래와 같은 계산기 앱을 패키징한다.

pyinstaller --icon="burning.ico" --name="Calculator" --noconsole --onefile main.py
39.5MB

dist 폴더에 39.5MB정도의 simple gui가 생성됨.

지금까지 작업한 내용의 폴더 구성내용

6. 정리

  • QtDesigner를 이용하여 간단하게 main.ui를 설계한다.
  • 리소스 파일 resource.qrc 를 리소스편집기를 통해 만든다. 이때 리소스에 main.ui를 포함시킨다
  • main.py 에서 importresource.py 를 compile한다.
  • main.py 에서 importfunc.py 를 구성한다.
  • main.py 를 구성한다. setup_ui 로 object와 function을 연결한다.
  • PyInstaller를 이용하여 exe파일로 패키징한다.

--

--

Jay

Brain Neural Network : Where neuroscience meets machine learning