728x90
반응형

 

https://gist.github.com/saleph/a301957b16dff7ad2892

 

[qt5] grid layout - calculator skeleton

[qt5] grid layout - calculator skeleton. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

전 포스팅인 PT Designer를 이용하여 계산기를 만들면서 구글링을 통해 위 사이트를 알게 되었다.

 

사이트에 있는 코드는 grid 계산기의 layout만 있었다. 이 코드를 이용하여 계산기의 기능을 구현하고자 한다.

 

def init_ui(self): 까지는 사이트에 있던 코드의 내용이고

 

def func_a는 내가 계산기의 기능을 추가한 것이다!

 

import sys
from PyQt5.QtWidgets import (QWidget, QGridLayout, QPushButton, QApplication, QPlainTextEdit, QLabel)

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.str =''
        self.label =QLabel();
        self.init_ui()

    def init_ui(self):
        grid = QGridLayout()
        self.setLayout(grid)

        names = ['Cls', 'Bck', '', 'Close',
                 '7', '8', '9', '/',
                 '4', '5', '6', '*',
                 '1', '2', '3', '-',
                 '0', '.', '=', '+']

        positions = [(i,j) for i in range(5) for j in range(4)]

        for position, name in zip(positions, names):
            if name == '' : continue
            btn = QPushButton(name)
            btn.clicked.connect(self.func_a)
            grid.addWidget(btn, *position)
        grid.addWidget(self.label)
        self.move(300,150)
        self.setWindowTitle('Calculator')
        self.show()
        self.str=""

    def func_a(self,x) -> None:
        sender = self.sender()  # 어떤 콤포넌트 또는 위젯에서 어떤 signal이 발생했는가?
        self.str = self.str + sender.text()

        self.label.setText(self.str)
        result=[]
        first_operand = 0

        if 'C' in self.str: #비우기
            self.label.clear()
            self.str = '' #문자열 내용 비우기

        for i in list(self.str):
            result_str = ''.join(result)
            if i == '=': # =일 경우 계산 결과를 label에 적용
                print("결과는 =",i, 'result :', result)
                print('결과는 ',result_str)
                print('비어있나', first_operand)
                print('계산 결과는', int(result_str)+first_operand)
                if '+' in self.str:
                    self.label.setText(str(int(result_str) + first_operand))
                if '-' in self.str:
                    self.label.setText(str(first_operand - int(result_str)))
                if '*' in self.str:
                    self.label.setText(str(first_operand * int(result_str)))
                if '/' in self.str:
                    self.label.setText(str(first_operand / int(result_str)))

            elif i in ['+','-','*','/']:
                first_operand += int(result_str)
                print('덧셈 누르면',result_str)
                print(i)
                result=[]

            else:
                result.append(i)
                print(i, '결과 : ',result)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

 

실행화면

 

2/3 입력

 

= 누른 순간 0.6666666666이 계산되었다.

728x90
반응형
728x90
반응형

PyCharm(파이참)에서 PyQT를 실행하였고

 

위젯을 생성하여 버튼을 누르면 함수를 호출하여 QMessageBox를 띄우는 것을 해볼 것이다.

 

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox

def dialog():
    a = QMessageBox()
    a.setText("여기에 출력되요")
    a.setDetailedText("상세 항목이 나와요")
    a.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
    a.exec_()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w= QWidget()
    w.resize(300,300)
    w.setWindowTitle("안녕 컴퓨터")
    label = QLabel(w)
    label.setText("여기는 라벨이에요")
    label.move(100,130)
    label.show()
    btn = QPushButton(w) #위젯 집어넣기
    btn.setText("여기는 푸시 버튼")
    btn.move(110,150) #버튼의 위치 이동
    btn.clicked.connect(dialog) #btn이 눌리면 dialog 함수 호출
    btn.show() #버튼을 보여줌
    w.show() # 중요 window는 기본값이 hidden이라 show 해야함
    sys.exit(app.exec_()) # 이상태는 이벤트 루프가 돌고있다.

라벨과 푸시버튼

 

버튼을 누르면 QMessageBox가 띄어진다.

728x90
반응형
728x90
반응형

파이참에서 pyqt를 적용하여 화면을 띄어보자

 

import sys
from PyQt5.QtWidgets import QApplication, QWidget

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w= QWidget()
    w.resize(300,300)
    w.setWindowTitle("안녕 컴퓨터")
    w.show()
    sys.exit(app.exec_())

[ 코드 설명 ]

 

resize - 위젯의 크기를 정함 (x축, y축)

 

w.show() # 중요하다.!  window는 기본값이 hidden이라 show 해야한다.

 

sys.exit(app.exec_()) # 이상태는 이벤트 루프가 돌고있다.

 

 

728x90
반응형
728x90
반응형

PyQt5 설치

pip install pyqt5

 

Pyside2 설치

pip install pyside2

 

Pyside2를 설치하셨으면 Qt Designer가 자동으로 설치되어있다.

 

 

designer.exe를 바로가기로 만들어두면 사용하기 편해진다.

 

UI 파일을 PY 파일로 변환

 

저장을 할 경우에는 파일이 .ui 파일로 저장된다.

 

이 파일을 .py 파일로 변환 하는 방법은 두가지가 있다.

 

1. cmd에서 파일변환하기

pyuic5 -x 변환할 파일(.ui) -o 변환되었을때 파일명(.py)

 

ui가 있는 파일에 위의 코드를 입력하면 된다.

 

 

열어보면 파이썬 코드로 변환된 것을 확인할 수 있다.

 

 

 

2. 저장할때부터 확장자 .py로 바꿔주기

.py로 바꿔주었다

--> 음... 이 방법은 파이참으로 열어보니 xml 형식이였다. 모두들 첫번째 방법을 사용하길 바랍니다.

 

 

ui를 py로 변환한 후 내가 만든 디자인이 파이썬 코드로 변환됬는지 바로 확인하기 위해

 

python (실행할 파일)

 

해주면 바로 GUI가 나오는 것도 확인할 수 있다.

 

728x90
반응형
728x90
반응형

파이참에서 실행하였다.

 

Settings -> Project Interpreter 에서 PyQT5에 관한 Package를 다운받았다.

 

hello.py를 생성해

import sys
from PyQt5.QtWidgets import *

app = QApplication(sys.argv)
label = QLabel("안녕 큐티?")
label.show()
app.exec_()

Ctrl + Shift +F10을 눌러 실행해주면

 

창이 띄어졌다!

728x90
반응형

+ Recent posts