파이썬 GUI 검색해서 보다가 기본만 정리..
#pyqt5
#설치방법 : pip install PyQt5
# Qt Designer 실행 방법
# 아나콘다 설치 디렉터리 (C:\ProgramData\Anaconda3\Library\bin)에서 designer.exe파일을 실행
기본형식
import sys
from PyQt5.QtWidgets import *
class Mainwindow(QMainWindow):
#def __init__(self):
# super().__init__()
def __init__(self, parent=None):
super(Mainwindow,self).__init__(parent)
self.initUI() # UI코드는 따로 함수로 빼서 깔끔하게 정리
def initUI(self):
self.setWindowTitle("auto-trader") # 창의 타이틀에 표시되는 이름 : auto-trader
self.setGeometry(300,100,600,200) # 기본창의 크기 조정 x y w h
######################################
# 여기에 내용 추가
######################################
if __name__ == '__main__': #import된 게 아니고 메인에서 실행되고 있으면 아래를 실행
app = QApplication(sys.argv)
mywindow = Mainwindow()
mywindow.show()
sys.exit(app.exec_()) # app.exec_() 종료하기 전까지 루프 돌리는 함수
레이아웃을 사용하기 위해서 위젯클래스를 분리해서 사용할 때
import sys
from PyQt5.QtWidgets import *
##### 메인윈도우
class Mainwindow(QMainWindow):
def __init__(self, parent=None):
super(Mainwindow,self).__init__(parent)
##### 메인화면 꾸미기 함수 실행
self.initUi()
##### 위젯클래스 메인윈도우의 센터에 셋팅
self.mywidget = Widgets(self)
self.setCentralWidget(self.mywidget)
##### 메인화면 꾸미기
def initUi(self):
self.setWindowTitle("test")
self.setGeometry(300,300,200,100)
##### 위젯영역
class Widgets(QWidget):
def __init__(self, parent):
super(Widgets,self).__init__(parent)
##### 위젯 함수 실행
self.initWidget()
##### 위젯셋팅
def initWidget(self):
label1 = QLabel("라벨", self)
combo1 = QComboBox(self)
gridlayout = QGridLayout(self)
gridlayout.addWidget(label1, 0,0)
gridlayout.addWidget(combo1, 0,1)
if __name__ == '__main__':
app = QApplication(sys.argv)
mywindow = Mainwindow()
mywindow.show()
sys.exit(app.exec_())
추가되는 내용들
#Label
self.account_label = QLabel("계좌") # 라벨 생성
self.account_label.setMaximumWidth(40) # 라벨 최대너비
self.account_label.setMinimumWidth(40) # 라벨 최소너비
#TextEditor
self.text_edit = QTextEdit(self) # 텍스트 에디터
#self.text_edit.setGeometry(0,90,200,80) #크기설정
self.text_edit.setEnabled(True) #False
self.text_edit.append("윈도우 성공")
self.text_edit.setFixedHeight(100) #셀에 너비를 100으로 고정
#Button
# 버튼 정의
button1 = QPushButton("종료", self) # 버튼 텍스트
button1.move(20, 20) # 버튼 위치
button1.clicked.connect(self.button1_clicked) # 클릭 시 실행할 function
def button1_clicked(self):
#QMessageBox.about(self, "message", "clicked")
answer = QMessageBox.question(self, "종료 확인", "종료 하시겠습니까?",
QMessageBox.No | QMessageBox.Yes)
#여기서 Answer은 메세지 박스에서 사용자가 선택한 Yes, No결과를 돌려 받는다
#Yes 나 NO 외에도 QMessageBox.Apply, QMessageBox.Cancel등 다양한 버튼이 있다.
if answer == QMessageBox.Yes: #위에서 입력 받은 버튼 값으로 종료할지를 결정한다
QCloseEvent.accept() #종료를 실행한다.
else:
QCloseEvent.ignore() #종료를 무시한다.
#버튼명.clicked = 클릭이 되었을 때
#버튼명.clicked.connect = 발생시킬 이벤트
#QCoreApplication.instance(.quit) = 앱을 종료 시키는 코드
###########################################################
#ComboBox
self.account_combo = QComboBox(self) # 콤보박스 생성
self.account_combo.setMaximumWidth(160) # 최대너비
self.account_combo.setMinimumWidth(160) # 최소너비
#ListWidget
self.listWidget = QListWidget(self) # 종목코드를 표출할 영역 생성
self.listWidget.setGeometry(0,0,200,80) #크기설정
self.listWidget.setEnabled(False)
self.listWidget.addItems(["윈도우 성공"]) #리스트 형태의 값이 들어가야 한다.
#TableWidget
##### 잔고표출 영역생성
self.tableWidget_balance = QTableWidget(self)
balance = ['예수금(d+2)','출금가능금액', '총매입금', '총평가', '총손익', '총수익률', '추정예탁자산']
self.tableWidget_balance.setGeometry(210,0,600,300) #크기설정
self.tableWidget_balance.setRowCount(1) # 행의 갯수
self.tableWidget_balance.setColumnCount(len(balance)) # 컬럼의 갯수
self.tableWidget_balance.setHorizontalHeaderLabels(balance) # 컬럼명 설정
#self.tableWidget_balance.resizeColumnsToContents() # 컬럼 사이즈를 내용에 맞추어설정
self.tableWidget_balance.resizeRowsToContents() # 행의 사이즈를 내용에 맞추어설정
self.tableWidget_balance.setFixedHeight(80) # 위젯크기 고정
self.tableWidget_balance.setColumnWidth(0,80) # 0에 위치한것 크기(원하는사이즈로 수정가능)
self.tableWidget_balance.setColumnWidth(1,80)
self.tableWidget_balance.setColumnWidth(2,80)
self.tableWidget_balance.setColumnWidth(3,80)
self.tableWidget_balance.setColumnWidth(4,80)
self.tableWidget_balance.setColumnWidth(5,80)
self.tableWidget_balance.setColumnWidth(6,80)
# 보유종목현황 영역생성
self.tableWidget_item = QTableWidget(self)
item = ['종목명', '보유량', '매입가', '현재가', '평가손익','수익률(%)']
self.tableWidget_item.setGeometry(210,90,600,500) #크기설정
self.tableWidget_item.setRowCount(100)
self.tableWidget_item.setColumnCount(len(item))
self.tableWidget_item.setHorizontalHeaderLabels(item)
self.tableWidget_item.resizeColumnsToContents()
self.tableWidget_item.resizeRowsToContents()
#StatusBar
self.statusbar = QStatusBar(self)
self.setStatusBar(self.statusbar)
#상태표시줄 현재시간
import time
# 타이머 설정 상태표시줄 현재시간
self.timer = QTimer(self)
self.timer.start(1000)
self.timer.timeout.connect(self.timeout)
##### 상태표시줄에 들어갈 현재시간
def timeout(self):
current_time = QTime.currentTime()
text_time = current_time.toString("hh:mm:ss")
time_msg = "현재시간 : " + text_time
self.statusbar.showMessage("테스트중 | " + time_msg)
#시작할 때 메인 윈도우를 화면 중앙에 배치. #아래에 함수로 정의 되어있음
self.center()
def center(self): # 함수선언, 요건
qr = self.frameGeometry() # frameGeometry() 메서드를 이용해서 창의 위치와 크기 정보를 변수에 저장
cp = QDesktopWidget().availableGeometry().center() # 모니터 화면의 가운데 위치 파악
qr.moveCenter(cp) # 창의 직사각형 위치를 화면의 중심의 위치로 이동
self.move(qr.topLeft()) # 현재창 이동
# 윈도우 종료 이벤트 발생시 메세지박스로 종료 확인하는 함수
def closeEvent(self, QCloseEvent): # X버튼을 클릭 하면 QCloseEvent 발생
re = QMessageBox.question(self, "종료 확인", "종료 하시겠습니까?", # 메세지 표출
QMessageBox.Yes|QMessageBox.No)
if re == QMessageBox.Yes: # yes클릭 시 종료
QCloseEvent.accept()
else: # no클릭 시 무시하고 text_edit창에 문구표출
QCloseEvent.ignore()
self.text_edit.append("종료 취소") #기존에 만들어 두었던 text_edit창에 종료 취소 띄워줌
[파이썬] 전자공시(Open DART) 재무제표 크롤링 (스크랩) (2) | 2020.08.25 |
---|---|
[전자공시 DART API] 기업 고유번호 크롤링 결과 (고유번호, 회사명, 종목코드, 수정일) (0) | 2020.08.24 |
[파이썬] argv[], 재귀함수 (하위폴더검색) (유튜브 보다가 메모) (0) | 2020.08.23 |
[파이썬] DART 전자공시 API (JSON) - JSON자료로 해봤다. (0) | 2020.08.19 |
[파이썬] DART 전자공시 API 사용방법(XML) - 인증,기업공시 검색까지 정리 (0) | 2020.08.18 |