Python 在Tkinter中打开保存文件

Python 在Tkinter中打开保存文件,python,tkinter,menu,Python,Tkinter,Menu,我正在用Python做一个项目的接口,该项目包括制作一个可以为汇编语言编译程序的程序。我决定使用textboxs,并使用3个textbox进行接口:1个用于输入,1个用于错误显示,1个用于输出。 我还需要做一些基本的按钮,比如创建一个新文件,在第一个文本框中打开一个,从第一个文本框中保存一个,以及编译。我用菜单来做这件事 我的问题是,当我定义保存文件的函数时(open也有同样的问题),即使我没有单击savefile按钮,它也会在编译时保存。另外,当我正确保存文件时,我不能再修改文本框上的文本了,

我正在用Python做一个项目的接口,该项目包括制作一个可以为汇编语言编译程序的程序。我决定使用textboxs,并使用3个textbox进行接口:1个用于输入,1个用于错误显示,1个用于输出。 我还需要做一些基本的按钮,比如创建一个新文件,在第一个文本框中打开一个,从第一个文本框中保存一个,以及编译。我用菜单来做这件事

我的问题是,当我定义保存文件的函数时(open也有同样的问题),即使我没有单击savefile按钮,它也会在编译时保存。另外,当我正确保存文件时,我不能再修改文本框上的文本了,有人能解释一下为什么以及我应该怎么做吗

from tkinter import *

class Interface(Frame):

def __init__(self, parent):
    Frame.__init__(self, parent)   
    self.parent = parent        
    self.initUI(parent)

def initUI(self, win):

    self.parent.title("Interface assembleur")
    self.pack(fill=BOTH, expand=1)
    menubar = Menu(self.parent)
    self.parent.config(menu=menubar)  
    sousmenu = Menu(menubar, tearoff= 0)
    menubar.add_cascade(label="Fichier", menu=sousmenu)
    #sousmenu.add_command(label="Nouveau fichier", command=self.newFile)
    #sousmenu.add_command(label="Ouvrir", command=self.openFile())
    sousmenu.add_command(label="Enregistrer sous", command=self.saveFile())
    menubar.add_command(label="Compiler", command=self.hello)

    S = Scrollbar(self)
    S.pack(side=RIGHT, fill= Y)
    #myString = StringVar()

    T2 = Text(self, height = 30, width = 26)
    T2.pack()
    T2.pack(side=RIGHT, fill = BOTH)
    T2.config(yscrollcommand=S.set)
    T2.insert(END,"Console de sortie")

    T3 = Text(self, height = 7.5, width = 30)
    T3.pack()
    T3.pack(side=BOTTOM, fill = BOTH)
    T3.config(yscrollcommand=S.set)
    T3.insert(END, "Console d'erreur")

    T = Text(self, height = 50, width = 30)
    T.pack()
    T.pack(side=TOP, fill = BOTH)
    T.config(yscrollcommand=S.set)
    T.insert(END, "Console d'entrée")


def newFile(self):
    self.T.delete(0, END)
    self.T2.delete(0, END)
    self.T3.delete(0, END)

def hello(self):
    print ("hello!")

def saveFile(self):
    filename = filedialog.asksaveasfilename(parent=self, initialdir = "/",
    title = "Enregistrer sous",filetype = (("Fichiers textes","*.txt"),("Tous les fichiers","*.*")))
    if filename:
        return open(filename, 'w')

def openFile(self):
    ftypes = [('Fichiers textes', '*.txt'), ('Tous les fichiers', '*')]
    dlg = filedialog.Open(self, filetypes = ftypes)
    fl = dlg.show()

    if fl != '':
        f = open(fl, "r")
        text = f.read()
        self.txt.insert(END, text)


def main():
    win = Tk()
    win.geometry("640x480+440+140")
    test = Interface(win).pack()
    win.mainloop()  

if __name__ == '__main__':
    main()  

将命令分配给菜单项时,会调用函数
self.saveFile()
,因为有括号

相反,您应该只传递函数句柄
command=self.saveFile
,不带括号