[Python]利用Qt ListView制作的定时器工具

目标

在设备频繁启动测试中,设计一个能够自定义定时控制电源的GUI程序,实现自动化测试。

实施

1.GUI框架

使用python+pyqt5实现基本框架,界面如图
主界面

2.自定义的定时序列记录与遍历

使用Qt中的ListView控件保存当前所自定义的定时序列,并且实现任意位置插入/删除操作。
当点击运行时,通过遍历该列表,实现自动化电源控制,并且显示相关的时间信息。
在这里插入图片描述

3.电源控制模块

实现对特定电源的初始化+电源设置功能。

代码

#该项目实现定时控制直流电源,实现自动化电源测试功能;
# 实现内容:
# 1.通过listview显示当前制定的计划,包括电压值+时间;
# 2.对该list进行任意位置的删减和增加
# 3.执行时,通过读取该list执行相关动作并加以延时,实现遍历的目的;
# 4.显示时间信息
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication,QMessageBox
import MyGuiAppUI
import threading
import time
import datetime
from threading import Timer
import sys
import os
from PyQt5.QtGui import QStandardItem
from PyQt5.QtGui import QStandardItemModel
from _overlapped import NULL
from matplotlib.dates import seconds


class MyApp(QtWidgets.QMainWindow, MyGuiAppUI.Ui_MainWindow):
    def __init__(self, parent=None):
        super(MyApp, self).__init__(parent)  
       
        self.setupUi(self)
        self.setWindowTitle("AutoPower(V1.0)")

        self.pushButton_add.clicked.connect(self.AddList)
        self.pushButton_delete.clicked.connect(self.DeleteList)
        self.pushButton_empty.clicked.connect(self.EmptyList)
        self.pushButton_run.clicked.connect(self.RunList)
        self.pushButton_stop.clicked.connect(self.StopList) 
                      
        self.listModel = QStandardItemModel(self.listView)        
        self.listView.clicked.connect(self.listClicked)         #listview 的点击事件
        self.insertIndex = 0
        self.runIndex = 0
        self.voltage = 0
        self.timeDuration = 0
        self.actionTimer = None
        self.startTime = 0
        self.endTime = 0
        self.cycCnt = 0
    def StopList(self):
        if  self.actionTimer != None:
            self.actionTimer.cancel()
            print("stop")

 
    def RunList(self): 
        rowCount = self.listModel.rowCount(QtCore.QModelIndex())
        item = QStandardItem()        
        if self.runIndex >= rowCount :
            self.runIndex = 0
            self.cycCnt= self.cycCnt + 1
        item = self.listModel.item(self.runIndex)
        print('Running:{}/{}'.format(self.runIndex+1,rowCount))
        self.runIndex = self.runIndex + 1
        t = item.text().split('\t')
        self.voltage = t[0].split(':')[1]
        self.timeDuration = t[1].split(':')[1]
        now  = datetime.datetime.now()
        if 0 == self.startTime:
            self.startTime = now
            self.lineEdit_time_start.setText(self.startTime.strftime("%y-%m-%d %H:%M:%S"))
        self.lineEdit_stat.setText('Set Voltage {}V for {}Min'.format(self.voltage,self.timeDuration))
        print('[{}]Set Voltage {}V with {}Min'.format(now.strftime("%y-%m-%d %H:%M:%S"),self.voltage,self.timeDuration))
        #添加实际电压控制代码      
        #添加实际电压控制代码      
        self.lineEdit_time_runing.setText(now.strftime("%y-%m-%d %H:%M:%S"))
        end= now+datetime.timedelta(seconds = int(self.timeDuration)*60)
        self.lineEdit_time_left.setText(end.strftime("%y-%m-%d %H:%M:%S"))
        self.lineEdit_time_cyc.setText(str(self.cycCnt))
        
        self.actionTimer =Timer(int(self.timeDuration)*60, self.RunList,())
        self.actionTimer.start()
        
    def EmptyList(self):
        print('RowCount:{}'.format(self.listModel.rowCount(QtCore.QModelIndex())))
        self.listModel.clear()
        self.insertIndex = 0
        
        
    def listClicked(self,qModelIndex):
        print('insertIndex:{}'.format(self.insertIndex)) 
        self.insertIndex = qModelIndex.row()+1
           
    def DeleteList(self):
        self.listModel.takeRow(self.insertIndex -1)
        self.insertIndex= self.insertIndex-1
        self.listView.setModel(self.listModel)

    def AddList(self):
        print("AddList")
        if (self.lineEdit_voltage.text().isdigit() == False) or(self.lineEdit_time.text().isdigit() == False):
            QMessageBox.warning(self,'错误','你愁啥?', QMessageBox.Ok )
            return
        newItem = QStandardItem()
        newItem.setText('Vol:{}\tTim:{}'.format(self.lineEdit_voltage.text(),self.lineEdit_time.text()))            
        self.listModel.insertRow(self.insertIndex, newItem)
        self.listView.setModel(self.listModel)
        self.insertIndex =self.insertIndex+1
        print('insertIndex:{}'.format(self.insertIndex))  
        pass    
        
try:       
    if __name__ == '__main__':        
        app = QApplication(sys.argv)
        form = MyApp()
        form.show()
        app.exec_()
except Exception as e:
    print('ERROR:{}'.format(e))
 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值