2013-05-05 100 views
0

我正在写一个使用tkinter的扫雷游戏,并且一切似乎都正常运行,但每次点击后python崩溃,我相信这是因为我添加了图像用来标记矿山的标志。以下是绘制所有单元格的函数,每次单击都会调用这些单元格。使Tkinter Photoimage崩溃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') 
+0

请添加堆栈跟踪,并缩进您的代码。 – Elazar 2013-05-05 21:59:24

+0

Python不提供堆栈跟踪,我得到的只是“pythonw.exe已停止工作”,然后程序继续崩溃。检查了float和int,这似乎不是问题。 请注意,我以前只是有canvas.create_oval的一切,这似乎并没有造成问题。 – user2352833 2013-05-05 22:06:01

+0

从解释器运行此代码,您将获得堆栈跟踪。否则,围绕它与'try:... except除外例如:print(ex)' – Elazar 2013-05-05 22:09:18

回答

0

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