Python扫雷艇(带tkinter)

Python扫雷艇(带tkinter),python,tkinter,minesweeper,Python,Tkinter,Minesweeper,我刚刚用Python调试了我的大部分扫雷器代码,但是决定胜负的游戏函数有一个问题。如果我赢了,它不会显示所需的消息框并确认赢了。如果我输了,它将显示一条错误消息,说明messagebox(tkinter内置函数)未定义 这是我的游戏代码: from tkinter import * import random ... def CheckWin(self): '''Checks if player won''' doneList = [] for key in self

我刚刚用Python调试了我的大部分扫雷器代码,但是决定胜负的游戏函数有一个问题。如果我赢了,它不会显示所需的消息框并确认赢了。如果我输了,它将显示一条错误消息,说明messagebox(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()
如果我输了,它将显示一条错误消息,说明messagebox(tkinter内置函数)未定义

messagebox
不是
tkinter
中的函数,它是一个模块。从pkg导入执行
*
不会导入
pkg
的子模块,而只是直接在
pkg
中定义的内容

所以,您可能想这样做:

from tkinter import messagebox

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

将来,不要发布所有代码;只需发布一个,刚好足够的代码来成功演示您的问题。例如,一个5行程序启动一个空窗口,然后尝试调用
messagebox.batherror()
,它会向我们显示完全相同的内容,但我们绝对可以肯定问题出在这5行中的某个地方。