我已经走到了死胡同,经过过度的(和不成功的)谷歌搜索,我需要帮助。

我正在构建一个简单的PyQt4小部件,它位于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

]

如果用户右键单击,它将使用通用的递归泛洪填充算法对区域进行泛洪填充。这对小空间非常有效,但是如果空间足够大,程序会失败,并出现错误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 // self.cell_size

self.rows = self.height // self.cell_size

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

]

self.cells = {(x,y):None for x in range(1,self.columns+1) for y in range(1,self.rows+1)}

def translate(self,pixel_x, pixel_y):

"Translate pixel coordinates (pixel_x,pixel_y), into grid coordinates"

x = pixel_x * self.columns // self.width + 1

y = pixel_y * self.rows // self.height + 1

return x,y

def check_cell(self,x,y):

if self.cells[(x,y)] <= 0:

self.cells[(x,y)]=0

elif self.cells[(x,y)] >= len(self.COLORS)-1:

self.cells[(x,y)]=len(self.COLORS)-1

else:

pass

def draw_cell(self, qp, col, row):

x1,y1 = (col-1) * self.cell_size, (row-1) * self.cell_size

x2,y2 = (col-1) * self.cell_size + self.cell_size, (row-1) * self.cell_size + self.cell_size

qp.drawRect(x1, y1, x2-x1, y2-y1)

def color_cell(self, qp, col, row):

qp.setBrush(QtGui.QColor(*self.COLORS[self.cells[(col,row)]]))

self.draw_cell(qp, col, row)

def draw_grid(self, qp):

qp.setPen(QtGui.QColor(128,128,128)) # gray

# Horizontal lines

for i in range(self.rows):

qp.drawLine(0, i * self.cell_size, self.width, i * self.cell_size)

# Vertical lines

for j in range(self.columns):

qp.drawLine(j * self.cell_size, 0, j * self.cell_size, self.height)

def set_all(self, type):

self.cells = {(x,y):type for x in range(1,self.columns+1) for y in range(1,self.rows+1)}

self.repaint()

def fill(self, x, y, type):

print(x,y)

if x < 1 or x >= self.columns+1 or y < 1 or y >= self.rows+1:

return

if self.cells[(x,y)] != None:

return

self.cells[(x,y)] = type

self.repaint()

self.fill(x+1, y, type)

self.fill(x-1, y, type)

self.fill(x, y+1, type)

self.fill(x, y-1, type)

def paintEvent(self, e):

qp = QtGui.QPainter()

qp.begin(self)

self.draw_grid(qp)

for row in range(1, self.rows+1):

for col in range(1, self.columns+1):

if self.cells[(col,row)] != None:

self.color_cell(qp, col, row)

qp.end()

def drawPoints(self, qp):

size = self.size()

for i in range(1000):

x = random.randint(1, size.width()-1)

y = random.randint(1, size.height()-1)

qp.drawPoint(x, y)

def mousePressEvent(self, e):

x,y = self.translate(e.pos().x(),e.pos().y())

if e.button() == QtCore.Qt.LeftButton:

if self.cells[(x,y)] == None:

self.cells[(x,y)]=0

else:

self.cells[(x,y)]+=1

self.check_cell(x,y)

elif e.button() == QtCore.Qt.RightButton:

self.fill(x,y,0)

'''

if self.cells[(x,y)] == None:

self.cells[(x,y)]=0

else:

self.cells[(x,y)]-=1

self.check_cell(x,y)

'''

else: pass

self.repaint()

def save(self):

return self.cells

def open(self, new_cells):

self.cells=new_cells

self.repaint()

def main():

app = QtGui.QApplication(sys.argv)

ex = Example()

ex.show()

sys.exit(app.exec_())

if __name__ == '__main__':

main()

有谁能帮助诊断这个问题,或者指出解决它的方向吗?

python错误找回_致命的Python错误:无法从堆栈溢出中恢复。洪水期间Fi相关推荐

  1. 怎么解决python遇到问题_新手常见Python错误及异常解决处理方案

    新手常见Python错误及异常解决处理方案,异常,错误,语句,子句,代码 新手常见Python错误及异常解决处理方案 易采站长站,站长之家为您整理了新手常见Python错误及异常解决处理方案的相关内容 ...

  2. 区分错误类型_形象解释 Python 新手最容易犯的错误

    点击上方"Python编程时光",选择"加为星标"第一时间关注Python技术干货! 一.画蛇添足:多余的分号 Python语言与大多数编程语言不相同,它的语句 ...

  3. 缩进是用来格式美化python程序的_以下对 Python 程序缩进格式描述错误的选项是...

    [单选题]以下程序的输出结果是:‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬ def ...

  4. python 线性回归模型_如何在Python中建立和训练线性和逻辑回归ML模型

    python 线性回归模型 Linear regression and logistic regression are two of the most popular machine learning ...

  5. python框架漏洞_注意!Python中的10个常见安全漏洞及修复方法

    编写安全的代码很困难,当你学习一门编程语言.一个模块或框架时,你会学习其使用方法.在考虑安全性时,你需要考虑如何避免代码被滥用,Python也不例外,即使在标准库中,也存在着许多糟糕的实例.然而,许多 ...

  6. 易语言和python混合编程_易语言python交互源码,不需要把易语言编译成静态库

    .版本 2 .支持库 spec .子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行 .局部变量 mothod, PyMethodDef .局部变量 创建结果, 整数型 .局部变量 错 ...

  7. python什么环境_什么是Python?(基础环境建设),NO2,搭建

    1. Python语言 1.1 Python语言的基本概念 Python 是⼀种极少数能兼具 "简单" 与 "功能强⼤" 的编程语⾔.你将惊异于发现你正在使⽤的 ...

  8. python debug工具_常用的 Python 调试工具,Python开发必读-乾颐堂

    以下是我做调试或分析时用过的工具的一个概览.如果你知道有更好的工具,请在评论中留言,可以不用很完整的介绍. 日志 没错,就是日志.再多强调在你的应用里保留足量的日志的重要性也不为过.你应当对重要的内容 ...

  9. python求加速度_如何利用Python 为自然语言处理加速度

    自去年发布 Python 的指代消解包(coreference resolution package)之后,很多用户开始用它来构建许多应用程序,而这些应用与我们最初的对话应用完全不同. 利用 spaC ...

最新文章

  1. 谷歌Chrome浏览器发布
  2. 【PAT (Basic Level) 】1015 德才论 (25 分)
  3. 比Keras更好用的机器学习“模型包”:0代码上手做模型
  4. RPC协议之争和选型要点
  5. [LintCode笔记了解一下]64.合并排序数组
  6. 前端感官性能的衡量和优化实践
  7. C ++ stringstream –参考和使用指南
  8. java开发文档怎么写?教你写java技术文档
  9. 机器学习与深度学习视频讲解
  10. codeforces 282 D. Yet Another Number Game
  11. SAP增强总结-第四代增强(BTE概念及原理)
  12. Tableau导出PDF格式文件
  13. Spring的四种注入方式
  14. 为什么选择MVVM而不是MVP - Android体系结构
  15. [译] 使用 Espresso 隔离测试视图
  16. Verilog设计的原则和技巧和IP核的使用
  17. 从零开始,手把手教你python爬取美足船袜网!
  18. CPOFDM-16QAM性能仿真,输出接收端的星座图
  19. 用两个栈做队列(左程云算法学习)
  20. Shell脚本编程案例集(持续更新)

热门文章

  1. Singleton模式
  2. Android 热修复总结
  3. jmeter的两种参数化方法
  4. 从d2来看前端的未来
  5. [PHP] 访问MySQL
  6. BCH压力测试悄然开始?有优势但也有不足!
  7. memcached 高可用工具 memcached-ha
  8. vue-cli构建项目
  9. SpringBoot文件上传异常之temporary upload location not valid
  10. 【VBA】点击工作簿中的每个单元格,整行整列变色