Tkinter会自动打开我的文件

时间:2015-05-30 03:34:00

标签: python tkinter

我制作了一个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这是整个功能。

1 个答案:

答案 0 :(得分:2)

看看这段代码:

processmenu.add_cascade(...,  command = main())

您要求python运行main函数,而它返回的是分配给command属性的内容。

您想要删除括号,以便将引用传递给函数,而不是执行函数的结果:

processmenu.add_cascade(..., command = main)