Python/QT

[python QT] 마우스 클릭 이벤트 핸들러에서 배경색 토글

언제나 휴일 빅데이터 언제나휴일 2020. 11. 19. 11:11
반응형

안녕하세요. 언제나 휴일입니다.

이번에는 마우스 클릭할 때 배경색을 토글(흰색과 검정색)하는 실습을 할게요.

마우스 클릭 시 배경 색 토글

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의 코드 내용은 이전 실습 내용과 특별한 차이가 없어서 설명을 생략할게요. 

반응형