我走到了尽头,经过过度(不成功)谷歌搜索后,我需要帮助.
我正在构建一个简单的PyQt4 Widget,它位于一个60x80正方形的网格中,每个正方形被初始化为None.如果用户单击该框,则会根据此列表定义的左键单击次数更改颜色:
self.COLORS=[
(0, 0, 255), #WATER
(255, 210, 128), #SAND
(0, 128, 0), #GREEN
(255, 255, 0), #YELLOW
(255, 165, 0), #ORANGE
(255, 0, 0) #RED
]
Run Code Online (Sandbox Code Playgroud)
如果用户右键单击,则使用常见的递归填充算法泛洪填充区域.这适用于小空间,但是如果空间足够大,程序会因错误而失败,Fatal Python error: Cannot recover from stack overflow.我不知道如何解决这个问题,也许洪水填充不是递归的?
所有正方形和后续颜色代码都存储在其中,self.cells因此通过设置self.cells[(y,x)]=1将单元格设置(y,x)为Sand颜色.
这是整个程序.
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self, cell_size=10, swidth=800, sheight=600):
QtGui.QWidget.__init__(self)
self.resize(swidth,sheight)
self.cell_size = cell_size
self.height = sheight
self.width = swidth
self.columns = self.width // …Run Code Online (Sandbox Code Playgroud)