请帮助修复脚本。
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'
我需要点击“退出”按钮后发生关闭程序
答案 0 :(得分:0)
不确定是什么导致了这个问题,但我也可以在Linux上重现完全相同的行为(Xubuntu 13.10,Python 3.3.2+)。
添加print(tkinter.__file__)
表示idle3
和python3
都使用相同的tkinter
lib,但print(dir(tkinter))
表示确实有messagebox
个import tkinter.messagebox
子模块和一个没有。
对我来说,在导入中添加idle3
解决了问题,从python3
和{{1}}(即从控制台)启动时都会显示消息框。