📄 stripchart2.py
字号:
else:
break
temp = data[next]
next = next + 1
alt = data[next]
if not wind[:3] == 'VRB':
self.WDir = atoi(wind[:3])
self.WSpeed = atoi(wind[3:])*23.0/20.0
if self.WDir == 0 and self.WSpeed == 0.0:
self.WDir = None # Calm
self.WSpeed = 0.0
if len(cloud) == 1 or len(cloud) == 2 or len(cloud) == 3:
if cloud[0] == 'CLR':
self.CLow = None
else:
self.CLow = atoi(cloud[0][3:6])/10
if len(cloud) == 2 or len(cloud) == 3:
if cloud[1] == 'CLR':
self.CLow = None
else:
self.CHigh = atoi(cloud[1][3:6])/10
elif len(cloud) == 3:
if cloud[2] == 'CLR':
self.CLow = None
else:
self.CVHigh = atoi(cloud[2][3:6])/10
self.Visibility = atoi(visib)
t, dpC = string.split(temp, '/')
self.Temp = (atoi(t)*(9.0/5.0))+32
dpF = (atoi(dpC)*(9.0/5.0))+32
self.Humidity = (dpF/self.Temp)*100
self.Press = eval('%s.%s' % (alt[1:3], alt[-2:]), _safe_env)
def getTestData(self):
try:
retData = 'Date Time\n%s' % testData[self.testIndex]
self.testIndex = self.testIndex + 1
except IndexError:
retData = None
self.testIndex = 0
return retData
##############################################################################
# Monitor Bar
##############################################################################
class MonitorBar:
def __init__(self, master=None, host='', width=600, height=50, bd=1):
self.master = master
self.width=width
self.height=height
self.host=host
self.frame=Frame(master, height=self.height, width=self.width,
relief='raised', bg='gray20')
self.frame.pack(fill=BOTH, expand=NO)
left = 0.05
for LL, LV in [('Temp', 'Temp'),('Altimeter','Press'),
('Wind','WSpeed'),('Humidity','Humidity'),('Ceiling','CLow')]:
Label(self.frame, text=LL, bg='gray20', font=('Verdana',10,'bold'),
fg="gray90").place(relx=left, rely=0.06, anchor=N)
setattr(self, '%sled'%LV, LED(self.frame, height=20, width=20,
shape=SQUARE, status=1, bg='gray20'))
getattr(self, '%sled'%LV).led_frame.place(relx=left, rely=0.7,
anchor=CENTER)
left = left + 0.15
def set(self, led, state, blink):
ledO = getattr(self, '%sled'%led)
exec('ledO.%s()'%state)
ledO.blinkstate(blink)
##############################################################################
# Set Thresholds Screen
##############################################################################
class SetThresholdsScreen(AppShell.AppShell):
usecommandarea=1
def createButtons(self):
self.buttonAdd('Apply', helpMessage='Apply thresholds',
statusMessage='Apply thresholds',
command=self.applyThresholds)
self.buttonAdd('Cancel', helpMessage='Close this window',
statusMessage='Close thresholds screen',
command=self.cancelThresholds)
def createMain(self):
self.fields = [
('Temp','Temp',[(' ',BLANK_VALUE),('None',BLANK_VALUE),
('32',32),('50',50),('75',75),('100',100),('110',110)], 'F'),
('Altimeter','Press',[(' ',BLANK_VALUE),('None',BLANK_VALUE),
('28.0',28.0),('28.5',28.5),('29.0',29.0),('30.0',30.0),
('30.5',30.5),('31.0',31.0),('31.1',31.1)], 'In. Hg'),
('Wind Speed','WSpeed',[(' ',BLANK_VALUE),('None',BLANK_VALUE),
('10',10),('20',20),('30',30),('40',40),('50',50),('60',60),
('70',70),('80',80),('90',90)], 'MPH'),
('Humidity','Humidity',[(' ',BLANK_VALUE),('None',BLANK_VALUE),
('25',25),('50',50),('75',75),('80',80),('90',90),
('100',100)], '%'),
('Ceiling','CLow',[(' ',BLANK_VALUE),('None',BLANK_VALUE),
('1000',1),('2000',2),('3000',3),('4000',4),
('5000',5)], 'Feet')]
self.DLookup = { 'Alarm Over': ALARMOVER, 'Alarm Under': ALARMUNDER,
'Warn Over': WARNOVER, 'Warn Under': WARNUNDER,
'None': WARNUNDER, ' ': WARNUNDER }
self.rDLookup = { ALARMOVER: 'Alarm Over', ALARMUNDER: 'Alarm Under',
WARNOVER: 'Warn Over', WARNUNDER: 'Warn Under'}
pwidth = self.root.winfo_reqwidth() - 100
pheight = self.root.winfo_reqheight() - 100
self.frame1 = self.createcomponent('frame1', (), None,
Frame,
(self.interior(),),
height=pheight, width=pwidth,
bd=1, relief='ridge')
self.frame1.forget()
for col in [0, 5]:
self.frame1.columnconfigure(col, minsize=30)
self.frame1.rowconfigure(0, minsize=20)
Label(self.frame1, text=' ').grid(row=0, column=0)
row = 1
for label, var, valueList,units in self.fields:
self.frame1.rowconfigure(row, minsize=20)
setattr(self, '%sL'%var, Label(self.frame1,text=label))
getattr(self, '%sL'%var).grid(row=row, column=1, sticky="e",
padx=2, pady=2)
setattr(self, '%sVLookup'%var, {})
setattr(self, '%srVLookup'%var, {})
itemList=[]
for vLabel, vValue in valueList:
itemList.append(vLabel)
getattr(self, '%sVLookup'%var)[vLabel] = vValue
getattr(self, '%srVLookup'%var)[vValue] = vLabel
setattr(self, '%s'%var, Pmw.ComboBox(self.frame1,
scrolledlist_items=itemList, entry_width=7,
entry_state="normal"))
getattr(self, '%s'%var).grid(sticky="e", row=row, column=2,
padx=2, pady=2)
setattr(self, '%sU'%var, Label(self.frame1, text=units))
getattr(self, '%sU'%var).grid(sticky="e", row=row, column=3,
padx=4, pady=2)
setattr(self, '%sT'%var, Pmw.ComboBox(self.frame1,
scrolledlist_items=(" ","Alarm Over", "Alarm Under",
"Warn Over", "Warn Under"),
entry_width=11, listheight=90, entry_state="normal"))
getattr(self, '%sT'%var).grid(sticky="e", row=row, column=4,
padx=2, pady=2)
row = row + 1
row = row + 1
self.frame1.rowconfigure(row, minsize=20)
Label(self.frame1, text=' ').grid(row=row, column=0)
self.frame1.pack(padx=5, pady=5, fill=BOTH, expand=YES)
def createInterface(self):
self.option_add('*Entry.font', ('Verdana', 10, 'bold'))
self.option_add('*Listbox.font', ('Verdana', 10, 'bold'))
AppShell.AppShell.createInterface(self)
self.root.title('Set Thresholds')
self.createButtons()
self.createMain()
def setParent(self, parent):
self.parent = parent
def cancelThresholds(self):
self.parent.tw.root.destroy()
def setCurrentValues(self):
parent = getattr(self, 'parent')
for label, var, valueList,units in self.fields:
cV, cD = getattr(parent, '%sThreshold'%var)
if not cV == BLANK_VALUE:
getattr(self, '%s'%var).selectitem(getattr(self,
'%srVLookup'%var)[cV])
getattr(self, '%sT'%var).selectitem(self.rDLookup[cD]),
else:
getattr(self, '%s'%var).selectitem(" ")
getattr(self, '%sT'%var).selectitem(" ")
def applyThresholds(self):
parent = getattr(self, 'parent')
for label, var, valueList,units in self.fields:
tV = getattr(self, '%s'%var).get()
tD = getattr(self, '%sT'%var).get()
if not tV or tV == " ": tV = "None"
if not tD or tD == " ": tD = "None"
setattr(parent, '%sThreshold'%var, (getattr(self,
'%sVLookup'%var)[tV], self.DLookup[tD]))
self.parent.doThresholds() # OK, go and set them...
self.setCurrentValues()
self.thresholdChanged = TRUE
def reset(self):
parent = getattr(self, 'parent')
for label, var, valueList,units in self.fields:
setattr(parent, '%sThreshold'%var, (BLANK_VALUE, WARNUNDER))
self.parent.doThresholds() # OK, go and set them...
self.setCurrentValues()
def translate_spaces(instring, trans):
res = ''
for c in instring:
if c == ' ' or c == '\t':
if trans != "": #To remove spaces
res = res + trans
else:
res = res + c
return (res)
def translate_underbars(instring):
res = ''
for c in instring:
if c == '_':
res = res + ' '
else:
res = res + c
return (res)
# "Safe" environment for eval()
_safe_env = {"__builtins__": {}}
def atoi(strIn):
result = 0
s = string.strip(strIn)
sign = ''
if s:
if s[0] in '+-':
sign = s[0]
s = s[1:]
while s[0] == '0' and len(s) > 1: s = s[1:]
str = sign
for c in s:
if c not in digits:
break # Got a terminator
str = str + c
if str:
result = eval(str, _safe_env)
return result
if __name__ == '__main__':
root = Tk()
root.option_add('*background', 'grey')
root.option_add('*foreground', 'black')
root.option_add('*Entry.background', 'white')
root.option_add('*Label.background', 'grey')
Pmw.initialise(root, fontScheme = 'pmw1', useTkOptionDb = 0)
w = WeatherMonitor(root, width=720, height=430)
w.master.title("Weather Monitor (%s)" % w.wStation)
w.master.iconname('Weather')
w.master.geometry('+20+20')
top = Toplevel(root)
w2 = MonitorBar(top)
w.monitor=w2
w2.master.title("Weather Threshold Monitor")
w2.master.geometry('+20+650')
root.mainloop()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -