每次输入框中有空值时程序都会崩溃,因为我需要实时调整它。该程序的作用是使用 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()
有没有办法在我调整偏移量时暂停程序而不会崩溃并记录错误?