끄적끄적

반응형

 

파이썬 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창에 종료 취소 띄워줌

 

 

 

 

 

 

 

 

반응형
Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]