반투명 PySide2 제작 창
오프닝
네, Advent Calendar 셋째 날에는 소재가 없어요.
처음에는 실용적인 글을 쓰는 의식이 있었다1
어쩔 수 없으니까 여기서부터 다음 주 월요일까지 내가 좋아하는 조사 내용을 적어놓을게.
그와는 전혀 관계가 없다.
그러니 3일째 보도를 보세요!
개막사
여러분은 창의 투과 처리를 써 본 적이 있습니까?지금까지 일한 적 한 번도 없어!
갑자기 창을 덮어쓸 수 있는 프로그램을 만들고 싶어서 잠깐 기억하고 싶어요. (던지기)
반투명 창은 잘하는 것과 못하는 것이 있어 구분해서 사용해야 한다
오늘의 보도는 이 점에 입각하여 해설을 하고 싶습니다!
오늘의 샘플 코드
#!python3
# encoding:utf-8
from PySide2 import QtWidgets
from PySide2 import QtCore
class Window(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle("Sample")
self.setStyleSheet("background-color:white;")
self.setFixedSize(480, 320)
hbox = QtWidgets.QHBoxLayout()
vbox = QtWidgets.QVBoxLayout()
hbox.addLayout(vbox)
button_first = QtWidgets.QPushButton("Button: 1")
button_first.setStyleSheet("background-color:gray; color:white;height:100%")
vbox.addWidget(button_first)
button_second = QtWidgets.QPushButton("Button: 2")
button_second.setStyleSheet("background-color:darkgray; color:white;height:100%")
vbox.addWidget(button_second)
textedit = QtWidgets.QTextEdit("QtWidgets.QTextEdit")
textedit.setStyleSheet("background-color:lightgray;")
hbox.addWidget(textedit)
self.setLayout(hbox)
if __name__ == "__main__":
app = QtWidgets.QApplication()
window = Window()
window.show()
exit(app.exec_())
네, Qt제로 특이한 잡화 창구가 없습니다.
오늘 이걸 통해서 보고 싶어요.
방법 1 창 배경의 투명도 설정
self.setwindow Flags에서 "WA Translucent Background"1 창의 배경을 통과할 수 있도록 설정합니다.
하지만 이렇게 되면'WA Translucent Background'를 설정할 때
배경을 추가한 WA NoSystemBackground의 영향을 받지 않아 배경색을 그리지 않았습니다.
paintEvent 측면에 배경색을 그려야 합니다.
class Window(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
# ~中略~
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setStyleSheet("background-color: rgba(255, 255, 255, 127);")
def paintEvent(self, event):
# NOTE: トップレベルのWidgetはWA_TranslucentBackgroundフラグが立つと、
# 背景が描画されなくなるので、paintEvent側で描画する。
painter = QtGui.QPainter(self)
painter.fillRect(0, 0, self.width(), self.height(), painter.background())
장점
특정 작은 위젯만 통과할 수 있습니다
결점
창의 Widget 전송은 윈도 Flags의 Frameless 윈도 Hint가 필요하기 때문에 제목 표시줄이 사라졌습니다
방법2 창에 투명도를 직접 적용
class Window(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
# ~中略~
self.setWindowOpacity(0.5)
장점투명성을 구현하는 간단한 방법
결점
Widget의 투명도는 개별적으로 설정할 수 없습니다.
끝맺다
채점 태그
레벨(5레벨)
추천도
★
난이도
★
집게
★★★★
통용성
★
콩나물도
★★★★
(위에서 설명한 가공된 이미지)
이번엔 사실 덮는 일과 다른 일에 해보고 싶다는 느낌을 조사했지만 안 돼...
먼저 PySide 2+Qt를 구축하고 QtWin 모듈을 추가하면 Win7 시대에 흔히 볼 수 있는 유리 프레임을 사용할 수 있다
위의 그림처럼 느껴지지만... 이번엔 그렇게 열정이 없어서...
뭐, 수법 1에 자기 작품 제목 표시줄만 추가하면 돼, 문제없어!!!(최선을 다해 패배를 인정하지 않는다)
그래서 개인적으로는 소화가 잘 안 돼요.
오늘의 보도는 여기까지입니다.
그럼 안녕!
그 일대의 말은 매주 토요일에 기사를 한 편 쓸 계획이다. ↩
Reference
이 문제에 관하여(반투명 PySide2 제작 창), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takumi_akashiro/items/c134715bef5106ea1f01텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)