【发布时间】:2018-10-21 15:42:44
【问题描述】:
也就是说,墙壁、起点、终点和入口看起来只是彩色矩形。我有一个问题,我怎样才能将它们变成图像?
在这里我得到了这些矩形的颜色。如何在同一个 drawImage 上更改此 drawRect 以绘制图片。
墙壁和地板
def draw_maze(self, drawer):
for x in range(self.maze.width):
for y in range(self.maze.height):
if self.maze[x][y] == self.maze.WALL:
drawer.setPen(Qt.white)
drawer.setBrush(Qt.black)
drawer.drawRect(x * self.maze.scale,
y * self.maze.scale,
self.maze.scale,
self.maze.scale)
elif self.maze[x][y] == self.maze.EMPTY:
drawer.setPen(QColor(200, 200, 200))
drawer.setBrush(Qt.white)
drawer.drawRect(x * self.maze.scale,
y * self.maze.scale,
self.maze.scale,
self.maze.scale)
开始和结束
def draw_start_and_finish(self, drawer):
if self.maze.start:
drawer.setPen(Qt.white)
drawer.setBrush(Qt.green)
drawer.drawRect(self.maze.start[0] * self.maze.scale,
self.maze.start[1] * self.maze.scale,
self.maze.scale,
self.maze.scale)
if self.maze.finishes:
drawer.setPen(Qt.white)
drawer.setBrush(Qt.blue)
for finish in self.maze.finishes:
drawer.drawRect(finish[0] * self.maze.scale,
finish[1] * self.maze.scale,
self.maze.scale,
self.maze.scale)
门户
def draw_portals(self, drawer):
colors = [QColor(0, 255, 255), QColor(255, 128, 0),
QColor(255, 0, 128), QColor(0, 102, 0),
QColor(0, 0, 102), QColor(153, 204, 255)]
drawer.setPen(Qt.black)
if self.portal1:
drawer.setBrush(colors[len(self.maze.portals)])
drawer.drawRect(self.portal1[0] * self.maze.scale,
self.portal1[1] * self.maze.scale,
self.maze.scale,
self.maze.scale)
for i in range(len(self.maze.portals)):
drawer.setBrush(colors[i])
for portal in self.maze.portals[i]:
drawer.drawRect(portal[0] * self.maze.scale,
portal[1] * self.maze.scale,
self.maze.scale,
self.maze.scale)
路径也用彩色矩形绘制。
def draw_path(self, drawer):
if self.path:
if self.draw_instantly:
for point in self.path:
if self.maze.is_wall(point[0], point[1]):
self.set_color(drawer, Qt.red)
else:
self.set_color(drawer, Qt.yellow)
drawer.drawRect(point[0] * self.maze.scale,
point[1] * self.maze.scale,
self.maze.scale,
self.maze.scale)
else:
for i in range(self.count):
if self.maze.is_wall(self.path[i][0], self.path[i][1]):
self.set_color(drawer, Qt.red)
else:
self.set_color(drawer, Qt.yellow)
drawer.drawRect(self.path[i][0] * self.maze.scale,
self.path[i][1] * self.maze.scale,
self.maze.scale,
self.maze.scale)
self.count += 1
if self.count > len(self.path) - 1:
self.count = len(self.path) - 1
self.update()
颜色获取方法:
@staticmethod
def set_color(drawer, color):
drawer.setPen(Qt.black)
drawer.setBrush(color)
很抱歉,我无法附上所有代码,它相当大,而且分散在许多文件中。
附: 几小时后添加。
我提供的代码和我的一样:
import sys
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPainter, QColor, QBrush
class MapEditor(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 350, 100)
self.setWindowTitle('MapEditor')
self.show()
def paintEvent(self, e):
drawer = QPainter()
drawer.begin(self)
self.drawRectangles(drawer)
drawer.end()
def drawRectangles(self, drawer):
col = QColor(0, 0, 0)
col.setNamedColor('#d4d4d4')
drawer.setPen(col)
drawer.setBrush(Qt.white)
drawer.setBrush(QColor(200, 0, 0))
drawer.drawRect(10, 15, 60, 60)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MapEditor()
sys.exit(app.exec_())
我需要一个相同大小的图片而不是这个矩形。我只是不知道正确使用哪种方法。我尝试了各种方法,例如 DrawImage 或类似的方法:
label = QLabel(self)
pixmap = QPixmap(image_path)
label.setPixmap(pixmap)
但它对我没有用,它给出了非常难以理解的错误,不幸的是我已经丢失了。
【问题讨论】:
-
如果您需要帮助,您必须提供minimal reproducible example,MCVE 并不是指您的项目可能是巨大的、拥有版权等,而是创建一个能够重现您的问题的最小项目。
-
@eyllanesc 好的,现在我将添加最简单最短的解决方案。
标签: python python-3.x pyqt pyqt5