Python GUI,关于保存计算输出

Python GUI,关于保存计算输出,python,user-interface,Python,User Interface,我正在做一个应用程序,做一些电子计算。我们提供输入,所有计算都在名为EarthCalc(Frame)的类中完成,我将该类称为: root = Tk() C = EarthCalc(root) 现在,从这个类中,我试图将一些计算出的输出保存到一个字典[在类外定义]中,这样我就可以将输出保存在记事本中。但它不起作用! 我已保存输入数据,但输出数据为空: def save_data(): fileName = tkFileDialog.asksaveasfilename(initialfi

我正在做一个应用程序,做一些电子计算。我们提供输入,所有计算都在名为
EarthCalc(Frame)
的类中完成,我将该类称为:

root = Tk()
C = EarthCalc(root)
现在,从这个类中,我试图将一些计算出的输出保存到一个字典[在类外定义]中,这样我就可以将输出保存在记事本中。但它不起作用! 我已保存输入数据,但输出数据为空:

def save_data():

    fileName = tkFileDialog.asksaveasfilename(initialfile='Untitled.txt',defaultextension=".txt",filetypes=[("All Files","*.*"),("Text Documents","*.txt")])
    try:
        file = open(fileName, 'w')
        mydata = {"Conductor Material" : C.conductor_material.get(), "Soil Resistivity" : C.a.get(), "Earth Fault Current" : C.b.get(), "Fault Clearance Time" : C.c.get(), "Electrode Type" : "Pipe", "Electrode Length" : C.d.get(), "Diameter of Pipe" : C.e.get(), "Initial Temperature" : C.f.get(), "Conductor Strip Length" : C.g.get(), "Conductor Strip Width" : C.h.get(), "Conductor Strip Thickness" : C.i.get(), "Earth Grid Burial Depth" : C.j.get(), "Current Division Factor" : C.sf.get(), "Decreament Factor" : C.df.get(), "Surface Layer Resistivity" : C.slr.get(), "Surface Layer Thickness" : C.slt.get(), "Weight Catagory" : C.weight_catagory.get()}
        myop = {"Number of Pits" : C.pits}
        #myop = {"Number of Pits" : C.pits, "Protective Conductor Cross Section" : C.cross_section, "Earth Grid Resistance" : C.grid_resistance, "Maximum Grid Current" : C.maximum_grid_current, "Surface Layer Derating Factor" : C.sldf, "Touch Potential Criteria" : C.tpc, "Step Potential Criteria" : C.spc, "Ground Potential Rise" : C.gpr, "Grid Area" : C.area1}
        #textoutput = "Input Data \nConductor Material: %s \nSoil Resistivity: %s \nEarth Fault Time: %s \nFault Clearance Time: %s \nLength of Pipe: %s \nDiameter of Pipe: %s \nInitial Temperature: %s \nConductor Strip Length: %s \nConductor Strip Width: %s \nConductor Strip Thickness: %s \nGrid Burial Depth: %s \nCurrent Division Factor: %s \nDecreament Factor: %s \nSurface Layer Resistivity: %s \nSurface Layer Height: %s \nWeight Catagory: %s \n\n\nOutput Data " %self.conductor_material.get(), %self.a.get(), %self.b.grt(), %self.c.get(), %self.d.get(), %self.e.get(), %self.f.get(), %self.g.get(), %self.h.get(), %self.i.get(), %self.j.get(), %self.sf.get(), %self.df.get(), %self.slr.get(), %self.slt.get(), %self.weight_catagory.get()
        file.write("Input Data\n\n")
        for line in mydata:
            file.write(line + ": " + mydata[line] + "\n")
        file.write("\n\nOutput Data \n\n")
        file.write(myop["Number of Pits"])
        #for item in myop:
            #file.write(myop[item])

帮我解决这个问题。请

您的代码存在一些潜在问题。如果您使用的是Python2.x,那么应该避免使用变量名“file”,因为它也是一个预定义的类,它可以在这个简短的代码段中工作,但在其他情况下可能会给您带来奇怪的bug。不过,名称文件在Python3中很好

由于崩溃(例如,如果坑数是一个数字,write将返回一个TypeError),这反过来可能会导致程序在数据实际刷新到磁盘之前崩溃,因此您没有显示except块中的内容有点问题

我可能会这样写:

def save_data():
   fileName = tkFileDialog.asksaveasfilename(initialfile='Untitled.txt',defaultex»tension=".txt",filetypes=[("All Files","*.*"),("Text Documents","*.txt")])

   try:
      with open(fileName,'w') as f:
         mydata = {"Conductor Material" :...
         myop = {"Number of Pits" : C.pits}
         f.write("Input Data\n\n")
         for line,value in mydata.iteritems():
            f.write("{0} : {1}\n".format(line, value ))
         f.write("\n\nOutput Data \n\n")
         f.write(str(myop["Number of Pits"]))
   except IOError as e:
      print "Error opening or writing {0}: {1}".format(fileName,e.message)

您的代码存在一些潜在问题。如果您使用的是Python2.x,那么应该避免使用变量名“file”,因为它也是一个预定义的类,它可以在这个简短的代码段中工作,但在其他情况下可能会给您带来奇怪的bug。不过,名称文件在Python3中很好

由于崩溃(例如,如果坑数是一个数字,write将返回一个TypeError),这反过来可能会导致程序在数据实际刷新到磁盘之前崩溃,因此您没有显示except块中的内容有点问题

我可能会这样写:

def save_data():
   fileName = tkFileDialog.asksaveasfilename(initialfile='Untitled.txt',defaultex»tension=".txt",filetypes=[("All Files","*.*"),("Text Documents","*.txt")])

   try:
      with open(fileName,'w') as f:
         mydata = {"Conductor Material" :...
         myop = {"Number of Pits" : C.pits}
         f.write("Input Data\n\n")
         for line,value in mydata.iteritems():
            f.write("{0} : {1}\n".format(line, value ))
         f.write("\n\nOutput Data \n\n")
         f.write(str(myop["Number of Pits"]))
   except IOError as e:
      print "Error opening or writing {0}: {1}".format(fileName,e.message)