“ValueError:无法将字符串转换为浮点数:”

时间:2021-07-22 11:27:25

标签: python-3.x raspberry-pi

每次输入框中有空值时程序都会崩溃,因为我需要实时调整它。该程序的作用是使用 Raspberry Pi 实时计算实验读数。所以在实验过程中我需要通过插入一个数字来调整偏移量。我在 Tkinter 中使用 Python 3。

代码如下:

from tkinter import *
from ABE_ADCPi import ADCPi
from ABE_helpers import ABEHelpers
from tkinter.filedialog import asksaveasfilename
import time
import datetime
import os


class Logging(Frame):
    def __init__(self, msecs=2000, filename="background.txt"):
        Frame.__init__(self)
        self.msecs = msecs
        self.grid()
        self.filename = filename
        transducers = ['Axial Stress (kPa)', 'Pore pressure (kPa)',
                       'Radial stress (kPa)', 'Axial strain (%)', 'Volume strain(%)']
        r = 1
        Label(self, text='logged values of stress and strain').grid(row=0,columnspan=2)
        Label(self, text='calibration').grid(row=0, column=3)
        Label(self, text='offset').grid(row=0, column=4)
        for t in transducers:
            lab = Label(self,text=t, width=25)
        lab.grid(row=r, column=1)
        r += 1  
        self.Axval = Entry(self, width=15)
        self.Axcal = Entry(self, width=15)
        self.Axoff = Entry(self, width=15)
        self.Axval.grid(row=1, column=2)
        self.Axcal.grid(row=1, column=3)
        self.Axoff.grid(row=1, column=4)
        self.Axval.insert(0, '0.0')
        self.Axcal.insert(0, '1692')
        self.Axoff.insert(0, '0.0')
        self.Ppval = Entry(self, width=15)
        self.Ppcal = Entry(self, width=15)
        self.Ppoff = Entry(self, width=15)
        self.Ppval.grid(row=2, column=2)
        self.Ppcal.grid(row=2, column=3)
        self.Ppoff.grid(row=2, column=4)
        self.Ppval.insert(0, '0.0')
        self.Ppcal.insert(0, '198.99')
        self.Ppoff.insert(0, '0.0')
        self.Radval = Entry(self, width=15)
        self.Radcal = Entry(self, width=15)
        self.Radoff = Entry(self, width=15)
        self.Radval.grid(row=3, column=2)
        self.Radcal.grid(row=3, column=3)
        self.Radoff.grid(row=3, column=4)
        self.Radval.insert(0, '0.0')
        self.Radcal.insert(0, '293.46')
        self.Radoff.insert(0, '0.0')
        self.Axeval = Entry(self, width=15)
        self.Axecal = Entry(self, width=15)
        self.Axeoff = Entry(self, width=15)
        self.Axeval.grid(row=4, column=2)
        self.Axecal.grid(row=4, column=3)
        self.Axeoff.grid(row=4, column=4)
        self.Axeval.insert(0, '0.0')
        self.Axecal.insert(0, '12.636')
        self.Axeoff.insert(0, '0.0')
        self.Veval = Entry(self, width=15)
        self.Vecal = Entry(self, width=15)
        self.Veoff = Entry(self, width=15)
        self.Veval.grid(row=5, column=2)
        self.Vecal.grid(row=5, column=3)
        self.Veoff.grid(row=5, column=4)
        self.Veval.insert(0, '0.0')
        self.Vecal.insert(0, '21.95')
        self.Veoff.insert(0, '0.0')

        Label(self, text='--------------------').grid(row=(6), column=1)
        Label(self, text='logging interval').grid(row=(7), column=1)
        interval = Entry(self, width=15)
        interval.grid(row=(7), column=2)
        interval.insert(0, 2000)
        self.interval = interval
        self.transducers = transducers


        button = Button(self, text="Data file name", command=self.DOpenfile)
        button.grid(row=(8), column=1)

        button = Button(self, text="Zero stresses", command=self.Dzerostresses)
        button.grid(row=(9), column=1)

        self.logchannels()

    

    def DOpenfile(self):
        filename = self.filename
        self.Openfile(filename)

    def Openfile(self, filename):
        self.filename = asksaveasfilename()
        header = "Date/time,"+self.transducers[0]+","+self.transducers[1]+"," + \
            self.transducers[2]+","+self.transducers[3]+","+self.transducers[4]
        if filename:
            open(self.filename, 'w').write(header)

    def Dzerostresses(self):
        channels = [3, 5, 4, 1, 2]
        i2c_helper = ABEHelpers()
        bus = i2c_helper.get_smbus()
        adc = ADCPi(bus, 0x68, 0x69, 18)
        os.system('clear')
        reading = float(adc.read_voltage(3))
        self.Axoff.delete(0, END)
        self.Axoff.insert(0, reading)
        reading = float(adc.read_voltage(5))
        self.Ppoff.delete(0, END)
        self.Ppoff.insert(0, reading)
        reading = float(adc.read_voltage(4))
        self.Radoff.delete(0, END)
        self.Radoff.insert(0, reading)

    def logchannels(self):
        channels = [3, 5, 4, 1, 2]
        i2c_helper = ABEHelpers()
        bus = i2c_helper.get_smbus()
        adc = ADCPi(bus, 0x68, 0x69, 18)
        os.system('clear')
        data = str(datetime.datetime.now())+","
        reading = float(self.Axcal.get()) * \
            (float(adc.read_voltage(3))-float(self.Axoff.get()))
        self.Axval.delete(0, END)
        self.Axval.insert(0, reading)
        data = data + str(reading)+","
        reading = float(self.Ppcal.get()) * \
            (float(adc.read_voltage(5))-float(self.Ppoff.get()))

        self.Ppval.delete(0, END)
        self.Ppval.insert(0, reading)
        data = data + str(reading)+","
        reading = float(self.Radcal.get()) * \
            (float(adc.read_voltage(4))-float(self.Radoff.get()))

        self.Radval.delete(0, END)
        self.Radval.insert(0, reading)
        data = data + str(reading)+","
        reading = float(self.Axecal.get()) * \
            (float(adc.read_voltage(1))-float(self.Axeoff.get()))

        self.Axeval.delete(0, END)
        self.Axeval.insert(0, reading)
        data = data + str(reading)+","
        reading = float(self.Vecal.get()) * \
            (float(adc.read_voltage(2))-float(self.Veoff.get()))

        self.Veval.delete(0, END)
        self.Veval.insert(0, reading)
        data = data + str(reading)+","
        open(self.filename, 'a').write(data + "\n")
        self.after(self.interval.get(), self.logchannels)



if __name__ == '__main__':
    Logging(msecs=2000).mainloop()


self.after(msecs, logchannels(self))


self.mainloop()

有没有办法在我调整偏移量时暂停程序而不会崩溃并记录错误?

0 个答案:

没有答案