⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stripchart2.py

📁 Python.Tkinter编程实例代码多多学习
💻 PY
📖 第 1 页 / 共 3 页
字号:
            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 + -