按下按钮时停止列表扩展

2024-06-08 22:56:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个程序,读取一个二进制文件,将十六进制数转换成不同的C类型,并将转换后的数字写入文件。因此,我在很大程度上使用了列表理解,并制作了一个GUI来访问要写入文件的选项。最后,用户在选择选项后按下a按钮,数据处理开始,随后创建文件。除非我多次按按钮,否则一切正常。创建的新文件包含旧数据和新数据,这当然取决于选项。所以我发现我正在创建的列表´不是像我希望的那样被覆盖或清除,而是扩展。我有很多名单,所以手动删除他们的名字是相当烦人。有没有更好的方法或方法来解决这个问题

我将包括代码,但只是其中的一小部分

import tkinter as tk
from tkinter import messagebox
from struct import unpack
from codecs import decode

class Graphicaluserinterface(tk.Frame):

    inputliste = []

    def __init__(self,master=None):
        super().__init__(master)
        self.grid()
        self.fileopenname = tk.StringVar()
        self.filesavename  =tk.StringVar()
        self.entrystring = tk.IntVar()
        self.taktzykluszeit = tk.DoubleVar()
        self.taktunterschiedboolean = tk.BooleanVar()
        self.menubar = tk.Menu(self)
        self.create_widgets()
        self.entrystring.set(9)
        self.taktzykluszeit.set(0.0)
        self.taktunterschiedboolean.set(False)

    def create_widgets(self):
        self.programmstart = tk.Button(self, text = "Start Program")
        self.programmstart.grid(row=10,column=8,sticky = "W")
        self.programmstart["command"]=lambda:[self.fileselectwarning(),self.writealldatafile(),self.writeselecteddata()]

    def zugriffaufdatenverarb(self):
        #this is the method that accesses the data processing methods

        inputfilepath2 = self.fileopenname.get()
        self.inputfilepath = inputfilepath2
        a = Trennzeichenalgorithmus
        a.fileopening123(self)
        a.trennzeichenmethode(self)
        b = Datenverarbeitung
        b.uhrzeitdermessung(self)
        b.drehzahl(self)
        b.temperatursensoren(self)
        b.analogvoltsensoren(self)
        b.analogmilliampsensoren(self)
        b.drehmomentsensoren(self)

    def writealldatafile(self):
        import csv
        from itertools import zip_longest
        outputfilepath2 = self.filesavename.get()
        self.outputfilepath = outputfilepath2
        allelisten = [self.datumstring,self.ganzesdatum,self.milliundmikroliste_3,self.drehzahlgsm1_4,self.drehmomentgsm1_4,
                  self.drehzahlgsm2_4,self.drehmomentgsm2_4]
        column_titles = []
        column_titles.append("Datum")
        column_titles.append("")
        column_titles.append("Taktzykluszeit in s")
        column_titles.append("Drehzahl_GSM_1 in 1/min")
        column_titles.append("Drehmoment_GSM_1 in Nm")
        column_titles.append("Drehzahl_GSM_2 in 1/min")
        column_titles.append("Drehmoment_GSM_2 in Nm")
        for j in range(len(self.analogvolt_3)):
            column_titles.append("Analogvoltsensor"+"_"+str(j+1)+" in +-10V")
            allelisten.append(self.analogvolt_3[j])
        for l in range(len(self.analogmilliamp_3)):
            column_titles.append("Analogamperesensor"+"_"+str(l+1)+" in 20 mA")
            allelisten.append(self.analogmilliamp_3[l])
        for i in range(len(self.thermoelement_3)):
            column_titles.append("Thermoelement"+"_"+str(i+1)+" in °C")
            allelisten.append(self.thermoelement_3[i])
        for k in range(len(self.pt100element_3)):
            column_titles.append("Pt-100-Element"+"_"+str(k+1)+" in °C")
            allelisten.append(self.pt100element_3[k])
        column_titles_tuple = tuple(column_titles)
        export_data1 = zip_longest(*allelisten, fillvalue = "")
        with open(self.outputfilepath,"w+",encoding="ISO-8859-1") as csvwithalldata:
        alldata=csv.writer(csvwithalldata,delimiter=";")
        alldata.writerow(column_titles_tuple)
        alldata.writerows(export_data1)
        csvwithalldata.close()

root = tk.Tk()
app = Graphicaluserinterface(master=root)
app.master.title("Test")
app.master.minsize(800,300)
root.config(menu=app.menubar)
app.mainloop()

方法“writealldatafile”将所有数据处理列表一起实现为一个列表,并将其写入文件中。如果你需要更多的代码或详细说明我的代码让我知道


Tags: 文件infromimportselfmasterapp列表
1条回答
网友
1楼 · 发布于 2024-06-08 22:56:17

好吧,我想我找到了一个简单的解决办法。读取二进制文件时,将创建一个包含十六进制值的列表。然后,该列表用于创建在某个时刻写入输出文件的所有其他列表。因此,在创建的第一个列表上使用del命令解决了我的问题

相关问题 更多 >