【问题标题】:Making Tkinter Photoimage crashes python program使 Tkinter Photoimage 崩溃 python 程序
【发布时间】:2013-05-05 21:51:43
【问题描述】:

我正在使用 tkinter 编写一个扫雷游戏,一切似乎都可以正常运行,但是每次单击后 python 都会崩溃,我相信这是因为我为用于标记的“标志”添加了图像哪里有矿。下面是绘制所有单元格的函数,每次移动/单击都会调用该函数。

def draw_cake_cell(canvas, row, col):
    # draws different cells on the board (blank cell, numbers, cake flags) 
    margin = 5
    cellSize = 30
    board = canvas.data['board']
    mask = canvas.data['mask']
    cake_count = canvas.data['cake_count']
    player_board = canvas.data['player_board']
    left = margin + col*cellSize
    top = margin + row*cellSize
    bottom = top + cellSize
    right = left+cellSize
    flag_img = PhotoImage(file="flag.gif")
    flag_label = Label(image = flag_img)
    flag_label.image = flag_img
    cake_img = PhotoImage(file = "cakeflag.gif")
    cake_label = Label(image = cake_img)
    cake_label.image = cake_img
    canvas.create_rectangle(left,top, right, bottom, fill = 'gray')
    if board[row][col] == -1:
       if canvas.data['isGameOver'] == True:
            canvas.create_image((left+right)/2,(top+bottom)/2,image = cake_img)
    elif mask[row][col] == -2:
        canvas.create_image((left+right)/2,(top+bottom)/2,image = flag_img)
    else:
       if cake_count[row][col] > 0 and player_board[row][col] == 1:
            value = cake_count[row][col]
            canvas.create_rectangle(left,top,right,bottom, fill = 'white')
            canvas.create_text((left+right)/2,(top+bottom)/2 , text = str(value), font = ('Helvetica',12))             
       if mask[row][col] == -2:
            canvas.create_image((left+right)/2,(top+bottom)/2,image = flag_img)
       if cake_count[row][col] == 0 and player_board[row][col] == 1:
            canvas.create_rectangle(left,top,right,bottom, fill = 'white')

【问题讨论】:

  • 请添加堆栈跟踪,并缩进您的代码。
  • Python 不提供堆栈跟踪,我得到的只是“pythonw.exe 已停止工作”,然后程序继续崩溃。检查了浮点数与整数,这似乎不是问题。另请注意,我之前只是为所有内容使用了 canvas.create_oval,这似乎并没有引起问题。
  • 从解释器运行此代码,您将获得堆栈跟踪。否则,用try: ... except Exception as ex: print(ex)包围它
  • 仍然没有得到堆栈跟踪...使用 try/except.. 我正在使用 Idle?

标签: python python-3.x tkinter crash minesweeper


【解决方案1】:

由于您使用的是 python3,(left+right)/2float,而不是 int。也许这就是问题所在 - 使用 (left+right)//2

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多