Python GUI,用于保存计算输出

时间:2015-06-01 09:29:39

标签: python user-interface

我正在制作一个执行电子计算的应用程序。我们提供输入,计算都在一个名为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])

帮我解决这个问题。请

1 个答案:

答案 0 :(得分:0)

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

由于崩溃(例如,如果Number of Pits是number.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)