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
반응형

* 본 포스팅은 주피터 노트북을 이용하였다. 파이참으로 실행해 보려면 이렇게

a란 변수를 추가하고 print(a)를 해줘야 볼 수 있을 것이다!

[ 대문자 소문자 변경 함수 ]

'hello'.upper() #'HELLO'

'HELLOW'.lower() #'hellow'

'hello'.capitalize() #'Hello'

 

[ 문자열 나누기(split), 결합하기(join), 세기(count), 교체하기(replace) ]

red = '안녕하세요,홍길동,바보'
result=red.split(',')
result				# ['안녕하세요', '홍길동', '바보']

#배열에 저장된 문자열을 하나의 문자열로 결합
','.join(result)	# '안녕하세요,홍길동,바보'

s1="aaaa"
s1.count('a')		# 4

s1="aaaabbb"
s1.count('b')		# 3

s1='Long Live the King'
s1.replace('King','홍길동')	# 'Long Live the 홍길동'

s2="X:Y:Z"
s2.split(":")	# ['X', 'Y', 'Z']

[ 문자열 format하기 ]

'I like {1} and {0}'.format('Python','java')
# 'I like java and Python'

'I like {} and {}'.format('Python','java')
# 'I like Python and java'

for i in range(2,15,2):
    print('{0:3d} {1:4d} {2:5d}'.format(i,i*i,i*i*i))
#  2    4     8
#  4   16    64
#  6   36   216
#  8   64   512
# 10  100  1000
# 12  144  1728
# 14  196  2744

print('소수점 두자리 {0:3.2f}'.format(3.141592)) #소수점 두자리 3.14

 

[ 문자열 find(찾기), strip(공백제거)하기 ]

'hobby'.find('o')		# 1

'             hello    '.rstrip() #오른쪽 공백제거
# '             hello'

'             hello    '.lstrip() #왼쪽 공백제거
# 'hello    '

'             hello    '.strip() #공백제거
# 'hello'

728x90
반응형
728x90
반응형

시작하기 앞서 주피터 노트북을 기반으로 진행하였고 여기있는 코드들은 파이참에 해도 무관하다

 

1. 모음일 경우 반복문을 종료

st = 'Programming'
for ch in st:
    if ch in ['a','e','o','u']:
        break;
    print(ch)
print('종료')

 

2. 문자열의 모음의 갯수를 구하기

## 문자열의 모음의 갯수를 구하기
st = 'Programmuroing'
cnt=0
for ch in st:
    if ch in ['a','e','o','u']:
        cnt=cnt+1
print('모음의 갯수는 ',cnt)

728x90
반응형

+ Recent posts