当前位置:   article > 正文

wxpython界面怎么添加静态文本_如何使用mcp3008中的数据显示和动态更新多个wxpython静态文本?...

wxpython 面板动态添加文字

我有一个从mcp3008和雨水传感器获取数据的python程序.我想使用wxpython在gui中显示它.这是我的传感器程序:

import spidev

from time import sleep

import os

spi = spidev.SpiDev()

spi.open(0,0)

def getAdc (channel):

if ((channel>7)or(channel<0)):

return -1

r = spi.xfer2([1, (8+channel) << 4, 0])

adcOut = ((r[1]&3) << 8) + r[2]

percent = int(round(adcOut/10.24))

volts = ((adcOut/1023) * 5)

if adcOut >= 0 and adcOut <= 300:

print "--------------------------------------------------------------"

print ("ADC Output: {0:4d} Percentage: {1:3}% Voltage : {2} V".format(adcOut,percent,volts))

print ("Rain Condition : Heavy Rain")

sleep(5)

elif adcOut >= 0 and adcOut <= 500:

print "--------------------------------------------------------------"

print ("ADC Output: {0:4d} Percentage: {1:3}% Voltage : {2} V".format(adcOut,percent,volts))

print ("Rain Condition : Moderate Rain")

sleep(5)

elif adcOut >= 0 and adcOut <= 700:

print "--------------------------------------------------------------"

print ("ADC Output: {0:4d} Percentage: {1:3}% Voltage : {2} V".format(adcOut,percent,volts))

print ("Rain Condition : Light Rain")

sleep(5)

else :

print "--------------------------------------------------------------"

print ("ADC Output: {0:4d} Percentage: {1:3}% Voltage : {2} V".format(adcOut,percent,volts))

print ("Rain Condition : No Rain")

sleep(5)

while True:

getAdc(0)

这是我创建的wxpython程序来显示它.帮助我如何将两个程序合并为一个以显示数据.

import datetime

global current_time

current_time = datetime.datetime.strftime(datetime.datetime.now(), '%d-%m-%y %H:%M:%S')

try:

import wx

except ImportError:

raise ImportError, "The wxPython module is required to run this program."

class RainSensorApp_wx(wx.Frame):

def __init__(self, parent, id, title):

wx.Frame.__init__(self, parent, id, size = (500, 300))

self.SetBackgroundColour(wx.BLUE)

self.parent = parent

self.initialize()

def initialize(self):

sizer = wx.GridBagSizer()

font = wx.Font(20, wx.DECORATIVE, wx.ITALIC, wx.NORMAL)

self.SetFont(font)

self.label = wx.StaticText(self, -1, label = u'Rain Sensor Level: {0:4d} Percentage: {1:3}% Voltage: {2} V'.format(adcOut, percent, volts))

self.label.SetBackgroundColour(wx.BLUE)

self.label.SetForegroundColour(wx.WHITE)

sizer.Add(self.label, (1,0), (1,2), wx.EXPAND)

self.label = wx.StaticText(self, -1, label = u'Rain Condition: {}'.format(rain_condition))

self.label.SetBackgroundColour(wx.BLUE)

self.label.SetForegroundColour(wx.WHITE)

sizer.Add(self.label, (2,0), (1,3), wx.EXPAND)

self.label = wx.StaticText(self, -1, label = u'Time Updated: {}'.format(current_time))

self.label.SetBackgroundColour(wx.BLUE)

self.label.SetForegroundColour(wx.WHITE)

sizer.Add(self.label, (3,0), (1,4), wx.EXPAND)

self.SetSizer(sizer)

self.Show(True)

def on_timer(self):

wx.CallLater(1000, self.on_timer)

if __name__ == "__main__":

app = wx.App()

frame = RainSensorApp_wx(None, -1, 'Rain Sensor Monitor')

app.Mainloop()

getAdc(0)

之后,我将使用CallLater添加计时器,以动态更新多个wxpython静态文本,因为我昨天才刚刚学习.感谢您能帮助我并阅读我的帖子.

解决方法:

这有点骇人听闻,因为我不得不模仿spidev,但这足以让您入门.

我认为很重要的地方记录了代码.

import datetime

#import spidev

from time import sleep

import os

#spi = spidev.SpiDev()

#spi.open(0,0)

#Setup some variables as I don't have spidev

global adcOut

adcOut = 200

percent = int(round(adcOut/10.24))

volts = ((adcOut/1023) * 5)

rain_condition="none"

global current_time

current_time = datetime.datetime.strftime(datetime.datetime.now(), '%d-%m-%y %H:%M:%S')

try:

import wx

except ImportError:

raise ImportError, "The wxPython module is required to run this program."

class RainSensorApp_wx(wx.Frame):

def __init__(self, parent, id, title):

wx.Frame.__init__(self, parent, id, size = (500, 300))

self.SetBackgroundColour(wx.BLUE)

self.parent = parent

self.initialize()

def initialize(self):

sizer = wx.GridBagSizer()

font = wx.Font(20, wx.DECORATIVE, wx.ITALIC, wx.NORMAL)

self.SetFont(font)

self.label1 = wx.StaticText(self, -1, label = u'Rain Sensor Level: {0:4d} Percentage: {1:3}% Voltage: {2} V'.format(adcOut, percent, volts))

#Give the labels unique names

self.label1.SetBackgroundColour(wx.BLUE)

self.label1.SetForegroundColour(wx.WHITE)

sizer.Add(self.label1, (1,0), (1,2), wx.EXPAND)

self.label2 = wx.StaticText(self, -1, label = u'Rain Condition: {}'.format(rain_condition))

self.label2.SetBackgroundColour(wx.BLUE)

self.label2.SetForegroundColour(wx.WHITE)

sizer.Add(self.label2, (2,0), (1,3), wx.EXPAND)

self.label3 = wx.StaticText(self, -1, label = u'Time Updated: {}'.format(current_time))

self.label3.SetBackgroundColour(wx.BLUE)

self.label3.SetForegroundColour(wx.WHITE)

sizer.Add(self.label3, (3,0), (1,4), wx.EXPAND)

#Create a timer and perform on_timer every 1000 milliseconds(change to 5000)

self.timer = wx.Timer(self)

self.Bind(wx.EVT_TIMER, self.on_timer, self.timer)

self.timer.Start(1000)

self.SetSizer(sizer)

self.Show(True)

def on_timer(self,event):

channel = 0

if ((channel>7)or(channel<0)):

return -1

#Hack out spidev references and use globals to emulate something happening

# r = spi.xfer2([1, (8+channel) << 4, 0])

# adcOut = ((r[1]&3) << 8) + r[2]

global adcOut

adcOut = adcOut +1

percent = int(round(adcOut/10.24))

volts = ((adcOut/1023) * 5)

if adcOut >= 0 and adcOut <= 300:

# Update the screen output

self.label1.SetLabel("ADC Output: {0:4d} Percentage: {1:3}% Voltage : {2} V".format(adcOut,percent,volts))

self.label2.SetLabel("Rain Condition : Heavy Rain")

elif adcOut >= 0 and adcOut <= 500:

self.label1.SetLabel("ADC Output: {0:4d} Percentage: {1:3}% Voltage : {2} V".format(adcOut,percent,volts))

self.label2.SetLabel("Rain Condition : Moderate Rain")

elif adcOut >= 0 and adcOut <= 700:

self.label1.SetLabel("ADC Output: {0:4d} Percentage: {1:3}% Voltage : {2} V".format(adcOut,percent,volts))

self.label2.SetLabel("Rain Condition : Light Rain")

else :

self.lable1.SetLabel("ADC Output: {0:4d} Percentage: {1:3}% Voltage : {2} V".format(adcOut,percent,volts))

self.lable2.SetLabel("Rain Condition : No Rain")

if __name__ == "__main__":

Rs = wx.App()

RainSensorApp_wx(None, -1, 'Rain Sensor Monitor')

Rs.MainLoop()

标签:python,wxpython

来源: https://codeday.me/bug/20191011/1891801.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/230605
推荐阅读
相关标签
  

闽ICP备14008679号