共通函数 波形图 鼠标事件

# -*- coding: utf8 -*-

import sys

import datetime

import codecs

import os

from PyQt4 import QtGui, QtCore

import PyQt4.Qwt5 as Qwt

from PyQt4.Qwt5.anynumpy import *

from PlotGraph import *#波形图

from CommonFun import *#共通函数

from Spy import *#鼠标事件

import TypeConvert

sqlDomestic = None

class BeiJingCosmic(QtGui.QWidget):

def __init__(self, sqlDomesticArg, parent=None):

QtGui.QWidget.__init__(self, parent)

self.setWindowIcon(QtGui.QIcon(‘image/icon.ico‘))

global sqlDomestic

sqlDomestic = sqlDomesticArg

self.titleLabel = QtGui.QLabel()

self.titleLabel.setText(u"北京宇宙线超中子堆")

self.titleLabel.setAlignment(Qt.Qt.AlignLeft)

##起始时间

self.srartTimeLabel = QtGui.QLabel()

self.srartTimeLabel.setAlignment(Qt.Qt.AlignRight)

#四周显示的内容

label2 = QtGui.QLabel()

label2.setText(u"中国科学院空间环境研究预报中心")

label2.setAlignment(Qt.Qt.AlignRight)

self.updateTimeLabel = QtGui.QLabel()

self.updateTimeLabel.setAlignment(Qt.Qt.AlignLeft)

#北京宇宙线5分钟数据曲线

self.serverPlotBJ5M = make1()

self.serverPlotBJ5M.setYLeftLargeMag(5)

self.serverPlotBJ5M.setYLeftScale(-10,10,4)

font = QtGui.QFont()

font.setPointSize(9)

txt=Qwt.QwtText(u"Counts/5 Minutes")

txt.setFont(font)

self.serverPlotBJ5M.setYLeft(txt)

vBox = QtGui.QVBoxLayout()

vBox.addWidget(self.serverPlotBJ5M)

vBox.setSpacing(0)

self.gBox = QtGui.QGroupBox()

self.gBox.setLayout(vBox)

self.gBox.setPalette(QtGui.QPalette(QtGui.QColor(255,255,225)))

self.gBox.setAutoFillBackground(True)

hBoxUp = QtGui.QHBoxLayout()

hBoxUp.addWidget(self.titleLabel)

hBoxUp.addWidget(self.srartTimeLabel)

hBoxDown = QtGui.QHBoxLayout()

hBoxDown.addWidget(self.updateTimeLabel)

hBoxDown.addWidget(label2)

mainLayout = QtGui.QVBoxLayout()

mainLayout.addLayout(hBoxUp)

mainLayout.addWidget(self.gBox)

mainLayout.addLayout(hBoxDown)

self.setLayout(mainLayout)

#设置鼠标形状

QtGui.QApplication.setOverrideCursor(QtCore.Qt.ArrowCursor)

self.serverPlotBJ5M.setCanvasBackground(QtGui.QColor(255,255,225))

self.createRightActions()

self.registerContextMenuEvent()

###设置初始值

curEndTime =QtCore.QDateTime.currentDateTime().addSecs(-8*3600)

self.end = datetime.date(int(curEndTime.date().year()),

int(curEndTime.date().month()),int(curEndTime.date().day()))

self.start = self.end + datetime.timedelta(-2)

self.resetBJPlot(self.start, self.end)

#设置定时器,15MIN更新一次

self.timer = QtCore.QTimer(self)

self.connect(self.timer, QtCore.SIGNAL("timeout()"), self.updateEveryHalfHour)

self.timer.start(1000*60*15)

def createRightActions(self):

#左侧

self.nextPageAct = QtGui.QAction( u‘下一页‘, self)

self.connect(self.nextPageAct, QtCore.SIGNAL("triggered()"), self.nextPageDis)

self.prevPageAct = QtGui.QAction( u‘上一页‘, self)

self.connect(self.prevPageAct, QtCore.SIGNAL("triggered()"), self.prevPageDis)

self.closeAct = QtGui.QAction( u‘退出‘, self)

self.connect(self.closeAct, QtCore.SIGNAL("triggered()"), self.close)

def registerContextMenuEvent(self):

#左侧

self.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)

self.addAction(self.prevPageAct)

self.addAction(self.nextPageAct)

self.addAction(self.closeAct)

#从数据库获取北京5分钟数据

def getBJ5MData(self, start, end):

self.xDataBJ5M = []

self.yDataBJ5M = []

self.bootomDateBJ5M = []

listDBX=[]#从数据库中取出的日期,得到的x

listX = []#画图时用到的x

listBootomDate=[]

self.dataDate = []#存储从数据库中获得的年月日

self.dateTime = []#存储从数据库获得的时分秒

steps=(end-start).days+1

for day in range(steps):

startStr=(start + datetime.timedelta(day)).__str__()

bootomDate=QtCore.QString(startStr)

listBootomDate.append(bootomDate)#要显示的日期

self.bootomDateBJ5M = listBootomDate

for fiveMinutes in range(steps*24*12):

listX.append(fiveMinutes)#x轴值

self.xDataBJ5M.append(fiveMinutes/(24*12*1.0))

startStr=start.__str__( )

endStr=end.__str__( )

startStr=startStr.replace(‘-‘,‘‘)

endStr=endStr.replace(‘-‘,‘‘)

#获得查询起始时间 更新时间

curTime = QtCore.QDateTime.currentDateTime().addSecs(-8*3600)

updateTime = datetime.datetime(curTime.date().year(),curTime.date().month()

,curTime.date().day(), curTime.time().hour(),

curTime.time().minute(), curTime.time().second())

tc = TypeConvert.TypeConvert()

ret, updateStr   = tc.ymdhmsTostr(updateTime.year, updateTime.month, updateTime.day,

updateTime.hour, updateTime.minute, updateTime.second)

#设置起始 更新时间

self.srartTimeLabel.setText(u"起始时间:%s-%s-%s 00:00:00 UTC"%(startStr[0:4], startStr[4:6],

startStr[6:8]))

self.updateTimeLabel.setText(u"更新时间:%s-%s-%s %s:%s:%s UTC"%(updateStr[0:4], updateStr[4:6],

updateStr[6:8], updateStr[8:10],

updateStr[10:12], updateStr[12:14]))

#sql =ExecuteSQL(ConfigInfo.dbInfo[‘user‘],ConfigInfo.dbInfo[‘pwd‘],ConfigInfo.dbInfo[‘tns‘])

#sqlDomestic =ExecuteSQL(‘YJDB‘,‘YJDB‘,‘isedb‘)

sqlDomestic.getConnect()

cuntSql = ‘select count(*) from t_bj_cr_5m_pre ‘

itemSql = "select ((to_date(datadate, ‘YYYYMMDD‘)-to_date(‘%s‘, ‘YYYYMMDD‘))*24*12\

+ (to_date(lpad(DATATIME,6,‘0‘), ‘hh24miss‘) - to_date(‘000000‘, ‘hh24miss‘))*24*12),\

neutron_count,datadate,lpad(datatime,6,‘0‘) from t_bj_cr_5m_pre"%startStr

whereSql = "where DATADATE between %s and %s"%(startStr,endStr) + " order by DATADATE,DATATIME"

state,count,cur = sqlDomestic.getQuery(cuntSql,itemSql,whereSql)

if state ==1:#数据查询失败

return 1

if count ==-99:#没有查询到数据

pass#弹出消息框,提示没有查询到数据

else:

for row in cur:

listDBX.append( int(round(row[0])) )

self.yDataBJ5M.append(row[1])

self.dataDate.append(row[2])

self.dateTime.append(row[3])

self.yDataBJ5M = handleVoidRecord(self.yDataBJ5M,listX,listDBX,True)

def resetBJPlot(self,startTime,endTime):

step = (endTime-startTime).days + 1

self.getBJ5MData(startTime,endTime)

#对数据进行处理并绘制曲线图

self.handledXDataBJ5M,self.handledYDataBJ5M = handleData(self.xDataBJ5M,self.yDataBJ5M)

self.serverPlotBJ5M.plotDraw(self.handledXDataBJ5M,self.handledYDataBJ5M,

None,None,Qt.Qt.blue,None,False)

minValue,maxValue,yStep=setYScaleCommon(self.yDataBJ5M,None ,

self.serverPlotBJ5M,10,False)

#self.serverPlotBJ5M.disableY()

self.serverPlotBJ5M.setXBottomScale(0,step,step/5+1)

self.serverPlotBJ5M.setXBottom("",self.bootomDateBJ5M)

#下面的接口在设置X坐标的时候可以将字体调小

#self.serverPlotBJ5M.setXBottomFZDH("",self.bootomDateBJ5M)

def nextPageDis(self):

curEndTime =QtCore.QDateTime.currentDateTime().addSecs(-8*3600)

curTime = datetime.date(int(curEndTime.date().year()),

int(curEndTime.date().month()),int(curEndTime.date().day()))

self.start =  self.start + datetime.timedelta(3)

self.end =  self.end + datetime.timedelta(3)

if self.end > curTime:

self.start =  self.start + datetime.timedelta(-3)

self.end =  self.end + datetime.timedelta(-3)

QtGui.QMessageBox.information(self,‘Message‘,

u"查询时间不能超过当前时间!", QtGui.QMessageBox.Yes)

return

self.resetBJPlot(self.start, self.end)

def prevPageDis(self):

self.start =  self.start + datetime.timedelta(-3)

self.end =  self.end + datetime.timedelta(-3)

self.resetBJPlot(self.start, self.end)

def updateEveryHalfHour(self):

curEndTime =QtCore.QDateTime.currentDateTime().addSecs(-8*3600)

self.end = datetime.date(int(curEndTime.date().year()),

int(curEndTime.date().month()),int(curEndTime.date().day()))

self.start = self.end + datetime.timedelta(-2)

self.resetBJPlot(self.start, self.end)

#键盘

def keyPressEvent(self, event):

if event.key() == QtCore.Qt.Key_Left:

self.prevPageDis()

elif event.key() == QtCore.Qt.Key_Right:

self.nextPageDis()

elif event.key() == QtCore.Qt.Key_Escape:

self.close()

‘‘‘

if __name__ == "__main__":

app = QtGui.QApplication(sys.argv)

login = BeiJingCosmic()

login.show()

app.exec_()

‘‘‘

时间: 2024-10-08 01:36:08

共通函数 波形图 鼠标事件的相关文章

C#共通函数

using System;using System.Collections.Generic;using System.Text;using System.Text.RegularExpressions;using System.IO;using System.Net;using System.Configuration;using System.Web;using System.Security.Cryptography; namespace Common{ public class Utils

鼠标事件(jQuery)

1jQuery鼠标事件之click与dbclick事件 用交互操作中,最简单直接的操作就是点击操作.jQuery提供了两个方法一个是click方法用于监听用户单击操作,另一个方法是dbclick方法用于监听用户双击操作.这两个方法的用法是类似的,下面以click()事件为例 使用上非常简单: 方法一:$ele.click() 绑定$ele元素,不带任何参数一般是用来指定触发一个事件,用的比较少 <div id="test">点击触发<div> $("e

JavaScript的事件_事件处理函数概述与鼠标事件的处理函数

一.事件处理函数概述 JavaScript 可以处理的事件类型为:鼠标事件.键盘事件.HTML 事件. 所有的事件处理函数都会都有两个部分组成,on + 事件名称,例如 click 事件的事件处理函数就是:onclick. 对于每一个事件,它都有自己的触发范围和方式,如果超出了触发范围和方式,事件处理将失效. 二.鼠标事件:页面所有元素都可触发 1.click:当用户单击鼠标按钮或按下回车键时触发. <script type="text/javascript"> windo

js整频滚动展示效果(函数节流鼠标滚轮事件)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-T

C++的容器(一):c++中所有容器的共通操作函数

C++中的所有容器都支持三个核心能力: 所有容器提供的都是‘value语义’而非‘reference语义’.可以通过指针元素来实现某些功能. 容器的所有元素有一个固定的次序(order),你可以以相同的次序多次遍历每个元素.并且每个容器也提供“迭代器生成器”函数,运用这些生成的迭代器可以遍历整个容器. 你无法保证程序的每个操作都安全.操作者必须确保操作函数的参数都符合要求,因为容器不会抛出异常. 容器(Container)的共通操作函数集(使用ContType表示所有容器类型): 函数 功能 C

整理之DOM事件阶段、冒泡与捕获、事件委托、ie事件和dom模型事件、鼠标事件

整理之DOM事件阶段 本文主要解决的问题: 事件流 DOM事件流的三个阶段 先理解流的概念 在现今的JavaScript中随处可见.比如说React中的单向数据流,Node中的流,又或是今天本文所讲的DOM事件流.都是流的一种生动体现.用术语说流是对输入输出设备的抽象.以程序的角度说,流是具有方向的数据. 事件流分事件冒泡与事件捕获 在浏览器发展的过程中,开发团队遇到了一个问题.那就是页面中的哪一部分拥有特定的事件? 可以想象画在一张纸上的一组同心圆,如果你把手指放在圆心上,那么你的手指指向的其

JavaScript进阶系列07,鼠标事件

鼠标事件有Keydown, Keyup, Keypress,但Keypress与Keydown和Keyup不同,如果按ctrl, shift, caps lock......等修饰键,不会触发Keypress事件,而会触发Keydown和Keyup事件,这就是Keypress事件与Keydown.Keyup事件的不同之处.另外,通常使用Keypress事件来获取用户输入信息. 继续使用"JavaScript进阶系列05,事件的执行时机, 使用addEventListener为元素同时注册多个事件

深入学习jQuery鼠标事件

前面的话 鼠标事件是DOM事件中最常用的事件,jQuery对鼠标事件进行了封装和扩展.本文将详细介绍jQuery鼠标事件 类型 鼠标事件共10类,包括click.contextmenu.dblclick.mousedown.mouseup.mousemove.mouseover.mouseout.mouseenter和mouseleave click 当用户按下并释放鼠标按键或其他方式"激活"元素时触发 contextmenu 可以取消的事件,当上下文菜单即将出现时触发.当前浏览器在鼠

DuiLib事件分析(一)——鼠标事件响应

最近在处理DuiLib中自定义列表行元素事件,因为处理方案得不到较好的效果,于是只好一层一层的去剥离DuiLib事件是怎么来的,看能否在某一层截取消息,自己重写. 我这里使用CListContainerElementUI行元素,元素中有插入button,平时行元素不显示,鼠标移动上去显示出来,鼠标移走就隐藏button.Duilib自己是不带这个功能的,它有一个鼠标移动上去的热点事件,按理说重写热点事件就好了.但是当时比较急没找到怎么触发的,之后一直没继续走这条思路.后来找到源码事件里面有 vo