【发布时间】:2021-05-18 12:47:53
【问题描述】:
我正在尝试使用 PyQt 设计一个棋盘 GUI。该板由框架组成。当我放置棋子的透明 PNG 时,PNG 会与窗口的背景一起着色,从而覆盖下面的框架。当没有为窗口设置背景颜色时,该块及其下方的方块会正确显示。如何将图像设置为不使用窗口背景颜色覆盖其下方的框架方块?
from PyQt5 import QtWidgets
import PyQt5.QtWidgets as qtw
import PyQt5.QtGui as qtg
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
DIM = 1024
SQUARE = 70
PIECE = 60
class MainWindow(qtw.QWidget):
def __init__(self):
super().__init__()
self.setLayout(qtw.QGridLayout())
self.resize(DIM,DIM)
board = [[] for _ in range(0, 8)]
for r, row in enumerate(board):
for c in range(0, 8):
square = QFrame(self)
square.setObjectName(u"frame" + f"{r}-{c}")
square.setGeometry(QRect(DIM // 2 - SQUARE * (c - 4),
DIM - 300 - SQUARE*(r+1), SQUARE, SQUARE))
if (r + c) % 2 == 0:
square.setStyleSheet(u"background-color: grey;")
else:
square.setStyleSheet(u"background-color: white;")
board[r].append(square)
self.setStyleSheet("background-color: indigo;")
self.setWindowFlag(Qt.FramelessWindowHint)
pawn = QtWidgets.QLabel(self)
pawn.setPixmap(qtg.QPixmap("pieces/b_pawn.png"))
pawn.setGeometry(DIM // 2 - 2 * SQUARE + 5 , DIM - 300 - SQUARE + 5, PIECE, PIECE)
self.show()
app = qtw.QApplication([])
mw = MainWindow()
app.exec_()
mw.show()
【问题讨论】: