【问题标题】:MineSweeper in Python (With tkinter)Python 中的 MineSweeper(使用 tkinter)
【发布时间】:2014-08-13 04:33:31
【问题描述】:

我刚刚在 Python 中调试了我的大部分 MineSweeper 代码,但决定输赢的游戏函数存在问题。如果我赢了,它不会显示所需的消息框并确认中奖。如果我输了,它会显示一条错误消息,指出消息框(一个 tkinter 内置函数)未定义。

这是我的游戏代码:

from tkinter import *
import random

...

def CheckWin(self):
    '''Checks if player won'''
    doneList = []
    for key in self.cells.keys():
        if self.cells[key].clicked == True and self.cells[key].value != 9:
            doneList.append(self.cells[key])
    if len(doneList) == int(height)*int(width)-int(numBombs):
        messagebox.showinfo('Minesweeper','Congratulations -- you won!', parent=self)
        self.winner = True

def CheckLoss(self):
    '''Checks if player lost'''
    self.loser = True
    self.flagTrack['text'] = '0'
    messagebox.showerror('Minesweeper','KABOOM! You lose.', parent=self)
    for key in self.cells.keys():
        if self.cells[key].value == 9:
            self.cells[key].flagged = False
            self.cells[key].expose()

【问题讨论】:

  • 以后不要发布所有代码;只需发布MCVE,就足以成功证明您的问题。例如,启动一个空窗口然后尝试调用messagebox.showerror() 的 5 行程序会向我们显示完全相同的内容,但我们绝对可以确定问题出在这 5 行代码中。跨度>

标签: python tkinter minesweeper


【解决方案1】:

如果我输了,它会显示一条错误消息,指出消息框(一个 tkinter 内置函数)未定义。

messagebox 不是tkinter 中的函数,它是一个模块。并且做from pkg import *不会导入pkg的子模块,只是直接在pkg中定义的东西。

所以,你可能想要这样做:

from tkinter import messagebox

(顺便说一句,这是from foo import * 可能令人困惑的原因之一,但不是唯一的原因。这就是为什么不推荐使用它的原因,除非在交互式解释器中玩耍,或者在一些特殊情况下。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多