반응형
안녕하세요. 언제나 휴일입니다.
이번에는 마우스 클릭할 때 배경색을 토글(흰색과 검정색)하는 실습을 할게요.
1. 소스 코드
#ToggleWindow
import PyQt5.QtWidgets as qtwid
import PyQt5.QtCore as qtcore
class ToggleWindow(qtwid.QMainWindow):
def __init__(self):
super().__init__()
self.flag = False
self.setWindowTitle("배경 색 토글")
self.resize(300,300)
self.ChangeColor()
def mousePressEvent(self, e):
if e.buttons() & qtcore.Qt.LeftButton:
self.ChangeColor()
def ChangeColor(self):
p = self.palette()
if(self.flag):
p.setColor(self.backgroundRole(), qtcore.Qt.white)
else:
p.setColor(self.backgroundRole(), qtcore.Qt.black)
self.setPalette(p)
self.flag = self.flag ^ True
#ToggleBackColor.py
import sys
import PyQt5.QtWidgets as qtwid
from ToggleWindow import ToggleWindow
app = qtwid.QApplication(sys.argv)
mw = ToggleWindow()
mw.show()
app.exec_()
2. ToggleWindow 클래스
ToggleWindow에서는 위젯 외에 색상 변경을 위해 코어 모듈을 사용합니다.
#ToggleWindow
import PyQt5.QtWidgets as qtwid
import PyQt5.QtCore as qtcore
ToggleWindow는 QMainWindow에서 파생한 클래스입니다.
class ToggleWindow(qtwid.QMainWindow):
2.1 __init__ 메서드
생성자 부분에서 기반 형식 초기화를 수행합니다.
def __init__(self):
super().__init__()
토글 여부를 체크하기 위한 멤버의 초기값을 False로 지정할게요.
self.flag = False
타이틀을 설정하고 크기를 지정합니다.
self.setWindowTitle("배경 색 토글")
self.resize(300,300)
색상을 변경하는 메서드를 호출합니다.
self.ChangeColor()
2.2 mousePressEvent 메서드
ToggleWindow에서 마우스를 클릭하였을 때 이벤트 처리를 하려면 기반 형식(QApplication의 기반 형식 QWidget)에 있는 가상 함수 mousePressEvent를 정의합니다.
def mousePressEvent(self, e):
왼쪽 버튼을 클릭하였을 때 색상을 변경하는 메서드를 호출합니다.
if e.buttons() & qtcore.Qt.LeftButton:
self.ChangeColor()
2.3 ChangeColor 메서드
팔레트를 얻어옵니다.
def ChangeColor(self):
p = self.palette()
flag값이 참일 때 팔레트의 backgroundRole을 흰색으로 거짓일 때 검정색으로 설정합니다.
if(self.flag):
p.setColor(self.backgroundRole(), qtcore.Qt.white)
else:
p.setColor(self.backgroundRole(), qtcore.Qt.black)
윈도우 자신의 팔레트를 설정하고 flag를 토글합니다.
self.setPalette(p)
self.flag = self.flag ^ True
Main.py의 코드 내용은 이전 실습 내용과 특별한 차이가 없어서 설명을 생략할게요.
반응형
'Python > QT' 카테고리의 다른 글
[python QT] 리스트 위젯 사용하기 (0) | 2020.11.19 |
---|---|
[python QT] Button 클릭하면 TextEdit에 입력 내용을 Label에 표시 (0) | 2020.11.19 |
[python QT] 나의 윈도우 클래스 만들기 (0) | 2020.11.19 |
[python QT] 첫 번째 응용 만들기 (0) | 2020.11.19 |