PySimpleGUI报错‘Unable to complete operation on element with key None’求助
PySimpleGUI猜数字程序错误修复
存在的问题及修复方式:
- 导入语句错误:
import randomimport PySimpleGUI as sg将两个库的导入语句连写,需拆分为两行:import random import PySimpleGUI as sg - 构造函数命名错误:类的初始化方法应为
__init__(前后各两个下划线),原代码中init少了下划线,导致类属性未正确初始化。 - 类方法缩进错误:
GerarNumeroAleatorio方法属于类的成员方法,需缩进至类内部,原代码中该方法在类外部,无法访问类的实例属性。 - 窗口创建参数错误:创建窗口时参数名应为小写的
layout,原代码中Layout=layout会被识别为自定义元素key,导致布局加载失败,这是触发Unable to complete operation on element with key None错误的核心原因。 - 主循环逻辑冗余:内层
while self.tentar_novamente == True循环无必要,外层已为主循环,每次点击按钮只需判断一次猜测结果即可。 - 未处理窗口关闭事件:当用户点击窗口关闭按钮时,
event会返回None,需在主循环中处理该情况以退出程序,避免报错。 - 异常处理范围过宽:原代码用
except:捕获所有异常,应改为捕获特定异常(如ValueError,即输入非数字时的异常),避免掩盖其他未知错误。
修复后的完整代码:
import random import PySimpleGUI as sg class ChuteONumero: def __init__(self): self.valor_aleatorio = 0 self.valor_minimo = 1 self.valor_maximo = 100 self.tentar_novamente = True def GerarNumeroAleatorio(self): self.valor_aleatorio = random.randint( self.valor_minimo, self.valor_maximo) def Iniciar(self): # Layout layout = [ [sg.Text('Seu chute', size=(39, 0))], [sg.Input(size=(18, 0), key='ValorChute')], [sg.Button('Chutar!')], [sg.Output(size=(39, 10))] ] # Criar uma janela self.janela = sg.Window('Chute o numero!', layout=layout) self.GerarNumeroAleatorio() while True: # Receber valores self.evento, self.valores = self.janela.read() # 处理窗口关闭事件 if self.evento is None: break # Fazer alguma coisa com os valores if self.evento == 'Chutar!': try: self.valor_do_chute = int(self.valores['ValorChute']) if self.valor_do_chute > self.valor_aleatorio: print('Chute um valor mais baixo') elif self.valor_do_chute < self.valor_aleatorio: print('Chute um valor mais alto!') else: self.tentar_novamente = False print('Parabéns, você acertou!') except ValueError: print('Não foi compreendido, apenas digite numeros de 1 a 100') self.janela.close() chute = ChuteONumero() chute.Iniciar()
内容的提问来源于stack exchange,提问作者Lenin Costa
相关产品推荐
相关产品推荐

