我制作了一个GUI应用程序,您可以在其中打开文件,然后就可以计算出一些内容(来自main函数)。但是,当我运行这个程序时,它会自动打开我选择的文件并运行main()函数,即使我还没有命令它。以下是代码的相关部分:
from Tkinter import *
import tkFileDialog
import tkMessageBox
import math
import re
class App(object):
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.text = Text()
self.text.pack()
menu = Menu(master)
root.config(menu=menu)
filemenu = Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="Open File", command=self.OpenFile)
filemenu.add_command(label="Save File As", command=self.SaveFile)
processmenu = Menu(menu)
menu.add_cascade(label="Calculate", menu=processmenu)
processmenu.add_cascade(label="Process the Input File", command = main())
helpmenu = Menu(menu)
menu.add_cascade(label="Help", menu =helpmenu)
helpmenu.add_command(label="About", command=self.about)
exitmenu = Menu(menu)
menu.add_cascade(label="Quit", menu=exitmenu)
exitmenu.add_command(label="Quit", command=self.quit)
def about(self):
tkMessageBox.showinfo( "About", "Lot Data Calculator v.01"\
"\n Made by Michael Hander."\
"\n Contact him at http://www.twitter.com/sludgehander."\
"\n All Rights Reserved. 2015")
def OpenFile(self):
infile = tkFileDialog.askopenfile()
text = infile.read()
if text != None:
self.text.delete(0.0, END)
self.text.insert(END,text)
def SaveFile(self):
outputfile = tkFileDialog.asksaveasfile()
savethetext = str(self.text.get(0.0,END))
outputfile.write(savethetext)
outputfile.close()
def quit(self):
root.destroy()
def main():
infile = tkFileDialog.askopenfile()
#algorithms to solve the input file
我的计划是打开程序然后我可以打开文件,然后输入显示在下面的小部件上。我已经做到了,除了我运行程序时,它没有显示菜单,而是立即显示打开的文件对话框。我尝试将main()放在进程菜单的命令中,但是当我点击它时,没有任何反应。此外,在main()函数完成后,我应该使用“保存文件”菜单将其保存到新文件,但我不知道如何放置所有产生的字符串。
http://dpaste.com/1BV8YR2这是整个功能。
答案 0 :(得分:2)
看看这段代码:
processmenu.add_cascade(..., command = main())
您要求python运行main
函数,而它返回的是分配给command
属性的内容。
您想要删除括号,以便将引用传递给函数,而不是执行函数的结果:
processmenu.add_cascade(..., command = main)