मैं semitransparent पृष्ठभूमि के साथ एक पूर्णस्क्रीन विंडो बनाना चाहता हूं, लेकिन पूरी तरह से दिखाई देने वाले बच्चों के विजेट (ओवरले प्रभाव की तरह)।PyQt5: गैर-पारदर्शी बच्चों के साथ अर्ध-पारदर्शी विंडो बनाएं
यहाँ मैं अब तक है:
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
app = QApplication(sys.argv)
# Create the main window
window = QMainWindow()
window.setWindowOpacity(0.3)
window.setAttribute(Qt.WA_NoSystemBackground, True)
window.setWindowFlags(Qt.FramelessWindowHint)
# Create the button
pushButton = QPushButton(window)
pushButton.setGeometry(QRect(240, 190, 90, 31))
pushButton.setText("Finished")
pushButton.clicked.connect(app.quit)
# Center the button
qr = pushButton.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
pushButton.move(qr.topLeft())
# Run the application
window.showFullScreen()
sys.exit(app.exec_())
यह एक अर्द्ध पारदर्शी प्रभाव पैदा करता है, लेकिन फिर भी बटन अर्द्ध पारदर्शी है।
मैं भी इस कॉल
window.setAttribute(Qt.WA_TranslucentBackground, True)
साथ लेकिन कोई लाभ नहीं हुआ
window.setWindowOpacity(0.3)
स्थानापन्न करने की कोशिश की इस मामले पृष्ठभूमि था में पूरी तरह से पारदर्शी (जबकि बटन ठीक से पूरी तरह से दिखाई दे रही थी)।
समाधान: (हारून के सुझाव को लागू किया धन्यवाद):
चाल मुख्य विंडो के लिए एक कस्टम paintEvent को लागू करने में है।
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class CustomWindow(QMainWindow):
def paintEvent(self, event=None):
painter = QPainter(self)
painter.setOpacity(0.7)
painter.setBrush(Qt.white)
painter.setPen(QPen(Qt.white))
painter.drawRect(self.rect())
app = QApplication(sys.argv)
# Create the main window
window = CustomWindow()
window.setWindowFlags(Qt.FramelessWindowHint)
window.setAttribute(Qt.WA_NoSystemBackground, True)
window.setAttribute(Qt.WA_TranslucentBackground, True)
# Create the button
pushButton = QPushButton(window)
pushButton.setGeometry(QRect(240, 190, 90, 31))
pushButton.setText("Finished")
pushButton.clicked.connect(app.quit)
# Center the button
qr = pushButton.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
pushButton.move(qr.topLeft())
# Run the application
window.showFullScreen()
sys.exit(app.exec_())
क्या होता है बटन अब भी है अर्द्ध पारदर्शी, और पृष्ठभूमि एक सिस्टम परिभाषित रंग सेट करता है (काला के बजाय, यह अब सफेद है)। मुझे यकीन नहीं है कि setWindowOpacity गैर-विंडो विजेट पर काम करता है। – Enuy
मेरा जवाब संपादित किया गया। मैंने इसे कभी-कभी ऐसा किया और यह हमेशा काम करता है क्योंकि आपको इसकी आवश्यकता होती है। – Aaron
ठीक है, मैं इस क्यूटी छद्म कोड को पीईक्यूटी में बदलने की कोशिश करूंगा और देख सकता हूं कि यह कैसे काम करता है। – Enuy