Надя Asked:2020-06-07 23:19:03 +0000 UTC2020-06-07 23:19:03 +0000 UTC 2020-06-07 23:19:03 +0000 UTC 什么可以用来在 QWidget 表单中绘制棋盘? 772 用过QGraphicsScene,但不是很方便,因为。那时我不知道方格的含义,我以后会按照方格排列场上的数字。 qt 1 个回答 Voted Best Answer S. Nick 2020-06-07T23:30:46Z2020-06-07T23:30:46Z 例如像这样: from PyQt5 import QtCore, QtGui, QtWidgets class Square(QtWidgets.QGraphicsWidget): def __init__(self, color): super().__init__() self.resize(640, 640) self.setMinimumSize(80, 80) if color: self.color = QtCore.Qt.white else: self.color = QtCore.Qt.black def paint(self, qp, option, widget): qp.fillRect(option.rect, self.color) class Scene(QtWidgets.QGraphicsScene): def __init__(self): super().__init__() self.container = QtWidgets.QGraphicsWidget() layout = QtWidgets.QGraphicsGridLayout(self.container) layout.setSpacing(0) self.container.setContentsMargins(0, 0, 0, 0) layout.setContentsMargins(0, 0, 0, 0) self.addItem(self.container) for row in range(8): for column in range(8): square = Square(not (row + column) & 1) layout.addItem(square, row, column, 1, 1) class Chess(QtWidgets.QGraphicsView): def __init__(self): super().__init__() self.resize(640, 640) scene = Scene() self.setScene(scene) self.setAlignment(QtCore.Qt.AlignCenter) self.setFrameShape(0) # make it transparent self.setStyleSheet('QGraphicsView {background: transparent;}') def resizeEvent(self, event): super().resizeEvent(event) self.fitInView(self.scene().container, QtCore.Qt.KeepAspectRatio) if __name__ == '__main__': import sys app = QtWidgets.QApplication(sys.argv) w = Chess() w.show() sys.exit(app.exec_())
例如像这样: