在 Python 中保存实时数据

如何解决在 Python 中保存实时数据

我有一个软件的 python 界面,该软件将来自相机的数据存储在 excel 中。软件工作是当我单击“就绪”时,相机开始录制并显示状态(正在运行),然后当我单击同一选项卡时它会停止。现在我想在excel中写入当前数据。目前它正在保存所有以前的值。

如果我能在这方面获得帮助,那将非常有帮助,因为我是 Python 新手。

import wx
import wx.lib.activex
import csv
import comtypes.client


class EventSink(object):

    def __init__(self,frame):
        self.counter = 0
        self.frame = frame

    def DataReady(self):
        self.counter +=1
        self.frame.Title= "DataReady fired {0} times".format(self.counter)

class MyApp( wx.App ): 

    def OnClick(self,e):
        
        rb_selection = self.rb.GetStringSelection()
        if rb_selection == "WinCam":
            data = self.gd.ctrl.GetWinCamDataAsVariant()
            data = [[x] for x in data]
        else:
            p_selection = self.cb.GetStringSelection()
            if p_selection == "Profile_X":
                data = self.px.ctrl.GetProfileDataAsVariant()
                data = [[x] for x in data]#csv.writerows accepts a list of rows where each row is a list,a list of lists
            elif p_selection == "Profile_Y":
                data = self.py.ctrl.GetProfileDataAsVariant()
                data = [[x] for x in data]
            **elif p_selection =="data_info":
                while self.data18 ==1:  
                    data= [self.data1,self.data2,self.data3,self.data4,self.data5,self.data6,self.data7,self.data8,self.data9,self.data10,self.data11,self.data12,self.data13,self.data14,self.data15,self.data16,self.data17,self.data18]
                    b=data
                    file = open('C:\\Users\\Namrata\\data.csv','w') 
                    with file:  
                        a = ['Clip Level a','Clip level b','Major','Minor','Mean','Eff_2W','Ellip','Orient','Crosshair','Xc','Yc','Centroid','Rc','ADC Peak','Exposure','image zoom','plateau uniformity'] 
                        zip(a,b)
                        out = csv.writer(file)
                        out.writerows(zip(a,b))
                        file.close()**
            
            else:
                datax = self.px.ctrl.GetProfileDataAsVariant()
                datay = self.py.ctrl.GetProfileDataAsVariant()
                data = [list(row) for row in zip(datax,datay)]#Makes a list of lists; X1 with Y1 in a list,X2 with Y2 in a list etc...
                filename = self.ti.Value
                with open(filename,'w') as fp:
                    w = csv.writer(fp,delimiter=',')
                    w.writerows(data)

   

    def __init__( self,redirect=False,filename=None ):
        wx.App.__init__( self,redirect,filename )
        self.frame = wx.Frame( parent=None,id=wx.ID_ANY,size=(1000,760),title='Python Interface to DataRay')
        #Panel
        p = wx.Panel(self.frame,wx.ID_ANY)
        #Get Data
        self.gd = wx.lib.activex.ActiveXCtrl(p,'DATARAYOCX.GetDataCtrl.1')
        #The methods of the object are available through the ctrl property of the item
        self.gd.ctrl.StartDriver()
        self.counter = 0
        sink = EventSink(self.frame)
        self.sink = comtypes.client.GetEvents(self.gd.ctrl,sink)
    
        
    
        #Button Panel
        bp = wx.Panel(parent=self.frame,size=(300,400))
        b1 = wx.lib.activex.ActiveXCtrl(parent=bp,size=(280,25),pos=(20,0),axID='DATARAYOCX.ButtonCtrl.1')
        b1.ctrl.ButtonID =297
        self.data18= b1.ctrl.GetParameter()
        b1.ctrl.GetParameter()#Id's for some ActiveX controls must be set
        b2 = wx.lib.activex.ActiveXCtrl(parent=bp,size=(140,pos=(5,30),axID='DATARAYOCX.ButtonCtrl.1')
        b2.ctrl.ButtonID =294
        self.data1= b2.ctrl.GetParameter()
        b3 = wx.lib.activex.ActiveXCtrl(parent=bp,pos=(150,axID='DATARAYOCX.ButtonCtrl.1')
        b3.ctrl.ButtonID =295
        data2= b3.ctrl.GetParameter()
        b4 = wx.lib.activex.ActiveXCtrl(parent=bp,60),axID='DATARAYOCX.ButtonCtrl.1')
        b4.ctrl.ButtonID =180
        data3= b4.ctrl.GetParameter()
        b5 = wx.lib.activex.ActiveXCtrl(parent=bp,axID='DATARAYOCX.ButtonCtrl.1')
        b5.ctrl.ButtonID =181
        self.data4= b5.ctrl.GetParameter()
        b6 = wx.lib.activex.ActiveXCtrl(parent=bp,90),axID='DATARAYOCX.ButtonCtrl.1')
        b6.ctrl.ButtonID =182
        data5= b6.ctrl.GetParameter()
        b7 = wx.lib.activex.ActiveXCtrl(parent=bp,axID='DATARAYOCX.ButtonCtrl.1')
        b7.ctrl.ButtonID =95
        data6= b7.ctrl.GetParameter()
        b8 = wx.lib.activex.ActiveXCtrl(parent=bp,120),axID='DATARAYOCX.ButtonCtrl.1')
        b8.ctrl.ButtonID =177
        data7= b8.ctrl.GetParameter()
        b9 = wx.lib.activex.ActiveXCtrl(parent=bp,axID='DATARAYOCX.ButtonCtrl.1')
        b9.ctrl.ButtonID =179
        data8= b9.ctrl.GetParameter()
        b10 = wx.lib.activex.ActiveXCtrl(parent=bp,150),axID='DATARAYOCX.ButtonCtrl.1')
        b10.ctrl.ButtonID =302
        data9= b10.ctrl.GetParameter()
        b11= wx.lib.activex.ActiveXCtrl(parent=bp,axID='DATARAYOCX.ButtonCtrl.1')
        b11.ctrl.ButtonID =171
        data10= b11.ctrl.GetParameter()
        b12 = wx.lib.activex.ActiveXCtrl(parent=bp,180),axID='DATARAYOCX.ButtonCtrl.1')
        b12.ctrl.ButtonID =172
        data11= b12.ctrl.GetParameter()
        b13 = wx.lib.activex.ActiveXCtrl(parent=bp,axID='DATARAYOCX.ButtonCtrl.1')
        b13.ctrl.ButtonID =298
        data12= b13.ctrl.GetParameter()
        b14 = wx.lib.activex.ActiveXCtrl(parent=bp,210),axID='DATARAYOCX.ButtonCtrl.1')
        b14.ctrl.ButtonID =425
        data13= b14.ctrl.GetParameter()
        b15 = wx.lib.activex.ActiveXCtrl(parent=bp,axID='DATARAYOCX.ButtonCtrl.1')
        b15.ctrl.ButtonID =183
        data14= b15.ctrl.GetParameter()
        b16 = wx.lib.activex.ActiveXCtrl(parent=bp,240),axID='DATARAYOCX.ButtonCtrl.1')
        b16.ctrl.ButtonID =409
        data15= b16.ctrl.GetParameter()
        b17 = wx.lib.activex.ActiveXCtrl(parent=bp,axID='DATARAYOCX.ButtonCtrl.1')
        b17.ctrl.ButtonID =301
        data16= b17.ctrl.GetParameter()
        b18 = wx.lib.activex.ActiveXCtrl(parent=bp,270),axID='DATARAYOCX.ButtonCtrl.1')
        b18.ctrl.ButtonID =291
        data17= b18.ctrl.GetParameter()
        
        #Custom controls
        t = wx.StaticText(bp,label="File:",300))
        self.ti = wx.TextCtrl(bp,value="C:\\Users\\Public\\Documents\\output.csv",pos=(30,300),size=(170,-1))
        self.rb = wx.RadioBox(bp,label="Data:",330),choices=["Profile","WinCam","Data Info"])
        self.cb = wx.ComboBox(bp,380),choices=[ "Profile_X","Profile_Y","data_info","Both"])
        self.cb.SetSelection(0)
        myb = wx.Button(bp,label="Write",380))
        myb.Bind(wx.EVT_BUTTON,self.OnClick)
        myd = wx.Button(bp,label="Dialog",330))
        myd.Bind(wx.EVT_BUTTON,self.OnClick)
        
        #Pictures
        pic = wx.lib.activex.ActiveXCtrl(parent=self.frame,400),axID='DATARAYOCX.CCDimageCtrl.1')
        tpic = wx.lib.activex.ActiveXCtrl(parent=self.frame,axID='DATARAYOCX.ThreeDviewCtrl.1')
        palette = wx.lib.activex.ActiveXCtrl(parent=self.frame,size=(10,250),axID='DATARAYOCX.PaletteBarCtrl.1')
        #Profiles
        self.px = wx.lib.activex.ActiveXCtrl(parent=self.frame,axID='DATARAYOCX.ProfilesCtrl.1')
        self.px.ctrl.ProfileID=22
        self.py = wx.lib.activex.ActiveXCtrl(parent=self.frame,axID='DATARAYOCX.ProfilesCtrl.1')
        self.py.ctrl.ProfileID = 23
        self.ax = wx.lib.activex.ActiveXCtrl(parent=self.frame,size=(150,360),axID='DATARAYOCX.getdataCtrl.1')
        #Formatting 
        row1 = wx.BoxSizer(wx.HORIZONTAL)
        row1.Add(window=bp,flag=wx.RIGHT,border=10)
        row1.Add(pic)
        row1.Add(window=tpic,flag=wx.LEFT,border=10)
        row2 = wx.BoxSizer(wx.HORIZONTAL)
        row2.Add(self.px,wx.RIGHT,100)# Arguments: item,proportion,flags,border
        row2.Add(self.py)
        col1 = wx.BoxSizer(wx.VERTICAL)
        col1.Add(sizer=row1,flag=wx.BOTTOM,border=10)
        col1.Add(sizer=row2,flag=wx.ALIGN_CENTER_HORIZONTAL)
        self.frame.SetSizer(col1)
        self.frame.Show()
       

        
if __name__ == "__main__":
     app = MyApp()
     app.MainLoop()

解决方法

要实时保存数据,您可以这样做:

首先创建一个持续触发的 wx.timer

self.timer = wx.Timer(self)
self.timer.start(#here you have to specify the amount of milliseconds the timer sleep before fire again)
self.Bind(wx.EVT_TIMER,self.OnTimer,self.timer)

然后创建 OnTimer() 函数将数据存储在 excel 文件中:

from openpyxl import load_workbook

def OnTimer(self,event):

    data = #here you get your data

    wb = load_workbook('path/to/yout/excel/file.xlsx')
    sheet = wb.active()


    #here you have to play with cells rows and cols by inserting data and saving,#for more info go to the below link

openpyxl documentation

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res