程序有多接近?

时间:2014-02-06 09:58:17

标签: python python-3.x tkinter

请帮助修复脚本。

import tkinter
import sys


class Operations():
    def openFile():
        pass

    def question(self, title, text, *args):
        return tkinter.messagebox.askyesno(title, text)

    def quitter(self, parent):
        print('check')
        ans = self.question('Verify quit', 'Are you sure you want to quit?')
        if ans:
            tkinter.Frame.quit(self)


class ToolBar(Operations, tkinter.Frame):
    def __init__(self, parent):
        tkinter.Frame.__init__(self, parent)
        self.parent = parent  
        self.makeToolBar()

    def makeToolBar(self):
        frame = tkinter.Frame(self.parent)
        frame.pack(side = 'top', fill = 'x', expand = 'yes')

        tool1 = tkinter.Button(frame, text = 'New')
        tool1.pack(side = 'left')

        tool2 = tkinter.Button(frame, text = 'Open')
        tool2.pack(side = 'left')

        tool3 = tkinter.Button(frame, text = 'Save')
        tool3.pack(side = 'left')

        tool4 = tkinter.Button(frame, text = 'Close')
        tool4.pack(side = 'left')

        tool5 = tkinter.Button(frame, text = 'Quit', command = lambda: self.quitter(root))
        tool5.pack(side = 'right')        



root = tkinter.Tk()
toolBar = ToolBar(root)
root.mainloop()

如果我从IDLE环境运行脚本并按下“Quit”按钮,则在控制台中显示“check”。

如果我通过双击文件(myfile.py)在windows7中运行脚本,然后单击“退出”按钮,然后在控制台输出中:

  

文件“C:\ Python33 \ projects \ TEXTPADS \ textPad_OOP \ q.py”,第14行       ans = self.question('验证退出','你确定要文件“C:\ Python33 \ projects \ TEXTPADS \ textPad_OOP \ q.py”,第10行       return tkinter.messagebox.askyesno(title,text)AttributeError:'module'对象没有属性'messagebox'

我需要点击“退出”按钮后发生关闭程序

1 个答案:

答案 0 :(得分:0)

不确定是什么导致了这个问题,但我也可以在Linux上重现完全相同的行为(Xubuntu 13.10,Python 3.3.2+)。

添加print(tkinter.__file__)表示idle3python3都使用相同的tkinter lib,但print(dir(tkinter))表示确实有messageboximport tkinter.messagebox子模块和一个没有。

对我来说,在导入中添加idle3解决了问题,从python3和{{1}}(即从控制台)启动时都会显示消息框。