🎫

001 대표를 뽑아라!

0. 스토리

라이캣은 그동안 키워온 회사를 로봇 대리인(Instance)에게 맡기고 알고리즘 7원석을 찾아 떠납니다.

참고 페이지
💰
캣의 모험 자금을 모아라!

notion imagenotion image

1. 기획

기획 단계, 그리고 디자인 단계는 프로그램을 만드는데 있어 매우 중요한 단계입니다. 이 단계를 건너 뛰면, 나중에 유지보수를 크게 해야 하거나, 생각치 못한(또는 아무도 사용하지 않을) 프로그램이 나오는 경우가 있습니다.
기획을 하기 앞서 먼저 해야 하는 질문은 다음과 같습니다.
  • 왜 이 프로그램을 만드는가?
  • 핵심 요소는 무엇인가?
  • 누가, 어떤 기기를 가지고 이 프로그램을 사용하는가?
  • 어떤 기능을 제공하는가?
이렇게 화면 구성을 해보면, 시행착오를 줄이고 원하는 결과물을 좀 더 빠르고 정확하게 만들 수 있습니다.
 

1.1 무엇을 이용해서 기획을 하는가?

  • 화면설계(스토리보드)
  • 정보구조설계 Information Architecture
    • 서비스의 정보(메뉴구조)를 단계별로 정리한 문서
  • 기능목록 서비스를 구성하고 있는 메뉴와 기능 목록
    • 블록체인으로 구현하는 투표 시스템 - jeju BlockChain Vote블록체인으로 구현하는 투표 시스템 - jeju BlockChain Vote
      블록체인으로 구현하는 투표 시스템 - jeju BlockChain Vote
  • Freemind, kakao oven을 이용한 가벼운 정보구조와 화면 설계를 할 수 있습니다.
 

1.2 우리가 사용할 화면 설계

우리는 가볍게 간단한 스케치를 사용하여 그림판에 그리듯이 설계를 하고, 디자인을 입혀 검토해본 다음, 구현하는 방식으로 진행할 예정이에요. 아래 그림은 손으로 작성한 화면 구성입니다. 가지고 있으신 태블릿이 있으시다면 태블릿으로 작성하셔도 좋습니다. 여러분이 만들고 싶은 작품을 가볍게 스케치해보세요.
notion imagenotion image

2. 디자인

디자이너가 위 그림을 가지고 가볍게 디자인한 모습입니다. 여러분이 원하는 프로그램을 스케치하셨다면, 이 작업을 건너뛰셔도 좋습니다. 디자인이 입혀진 느낌을 확인하고, 추가할 구성 요소가 더 없는지 확인해보는 절차입니다. 만약 프로그램을 주문한 고객이 있다면 시안을 가지고 고객에게 추가할 기능이(요구 사항 명세) 있는지 물어보기도 합니다.
notion imagenotion image
디자인을 보니 종료버튼이 있어야 할 것 같네요. 종료 버튼도 하나 추가하도록 하겠습니다. 실제로는 좀 더 다양한 논의들이 오고 갑니다. 여기서 최대한 구체화 시키는 것이 좋습니다.

3. 코드

import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QToolTip from PyQt5.QtGui import QIcon, QPixmap, QFont from PyQt5.QtCore import QCoreApplication import random class 대표선출프로그램(QWidget): def __init__(self): super().__init__() self.UI초기화() def UI초기화(self): self.이미지() self.버튼() self.툴팁() self.대리인번호() self.setWindowTitle('대표를 선출하라!') self.setWindowIcon(QIcon('img/캣네생선.png')) self.setGeometry(500, 500, 400, 400) self.show() def 이미지(self): self.대표이미지 = QLabel(self) #이미지 원본 크기 : 175, 220 self.대표이미지.setPixmap(QPixmap('img/weniv-licat.png').scaled(35, 44)) self.대표이미지.move(10, 10) def 버튼(self): self.대표선출버튼 = QPushButton('대표 선출', self) self.대표선출버튼.setFixedSize(340, 40) self.대표선출버튼.move(30, 290) self.대표선출버튼.clicked.connect(self.choice) self.종료버튼 = QPushButton('종료 버튼', self) self.종료버튼.setFixedSize(340, 40) self.종료버튼.move(30, 340) self.종료버튼.clicked.connect(self.close) def 툴팁(self): self.대표선출버튼.setToolTip('이 버튼을 누르면 대표를 선출합니다. \n주의하세요. 되돌릴 수 없습니다.') self.종료버튼.setToolTip('이 버튼을 누르면 프로그램을 종료합니다.') self.profileImg.setToolTip('생선가게 대표 라이켓') self.setToolTip('이곳은 QWidget!') def 대리인번호(self): # https://doc.qt.io/qtforpython/PySide2/QtGui/QFont.html self.대리인번호라벨 = QLabel('000', self) self.대리인번호라벨.setFont(QFont("Helvetica", pointSize=75, weight=2)) self.대리인번호라벨.move(80, 100) def choice(self): s = str(random.randint(1, 1000)) print(s) self.대리인번호라벨.setText(s) def close(self): return QCoreApplication.instance().quit() 프로그램무한반복 = QApplication(sys.argv) 실행인스턴스 = 대표선출프로그램() 프로그램무한반복.exec_()

4. 상세 내용

import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QToolTip from PyQt5.QtGui import QIcon, QPixmap, QFont from PyQt5.QtCore import QCoreApplication import random
  • 실행하는데 필요한 모듈들을 불러옵니다. 모듈들 하나하나에 대해서는 아래 챕터에서 하나씩 살펴볼 것입니다. 또는 살펴보지 않아도 바로 어떤 모듈인지 감이 오신다면 아래 공식문서를 참고해주세요.
  • 더 상세한 내용이나 찾고 싶은 모듈은 아래 pyqt 공식 홈페이지를 참고해주세요.
 
def __init__(self): super().__init__() self.UI초기화() def UI초기화(self): self.이미지() self.버튼() self.툴팁() self.대리인번호() self.setWindowTitle('대표를 선출하라!') self.setWindowIcon(QIcon('img/캣네생선.png')) self.setGeometry(500, 500, 400, 400) self.show()
  • 함수 초기화를 시키는 부분 입니다. self는 class '대표선출프로그램'이라는 객체를 의미합니다.
  • 'UI초기화'라는 메서드로 UI를 초기화하면서 이미지(), 버튼(), 툴팁(), 대리인번호()라는 메서드들을 호출합니다.
  • setWindowTitle()은 창 상단에 표시되는 제목을 의미합니다.
  • setWindowIcon()은 창 상단에 표시되는 아이콘을 변경합니다.
  • setGeometry()는 윈도우의 크기 및 출력 위치를 변경할 수 있습니다.
  • show()는 화면에 보여주는 메서드로 pyQt를 실행하기 위해 반드시 필요한 메서드입니다.
 

5. 실행 화면

notion imagenotion image
notion imagenotion image