#清空插件列表

#coding:utf-8

##########################################

#Author:rswofnd

#Vision:1.0

#DateTime:2012-6-7

##########################################

import sys

reload(sys)

sys.setdefaultencoding(‘utf-8‘)

import sys,os,datetime

from PyQt4 import QtGui, QtCore

from PyQt4.QtCore import Qt,QTimer, QTime

############################################

#初始化Qt界面及行为

#向第三方类及模块暴露API接口

class SmartDemon(QtGui.QWidget):

"""

docstring for SmartDemon(精灵)

"""

def __init__(self,side):

super(SmartDemon, self).__init__()

self.side = side

self.w = (self.side-20)/8

self.initui()

self.handleChange()

self.init_Plugins()

self.timer = QTimer()

self.timer.timeout.connect(self.update)

self.timer.start(100)

self.show()

def initui(self):

"""

初始化UI界面

"""

self.setGeometry(300,300,self.side,self.side)

self.popMenu()

sizeGrip=QtGui.QSizeGrip(self)

self.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint|Qt.SubWindow|Qt.WA_Moved)

self.trans=False                                  #True?

self.set_transparency(True)                       #设置窗口透明

def popMenu(self):

"""

定义弹出菜单

"""

setupAction = QtGui.QAction(QtGui.QIcon(‘SetUp.png‘), ‘&SetUp‘, self)       #定义动作抽象

setupAction.triggered.connect(self.setUp)

quitAction = QtGui.QAction( ‘Quit‘, self)

quitAction.triggered.connect(QtGui.qApp.quit)

self.popMenu= QtGui.QMenu()                                              #定义右键弹出菜单

self.popMenu.addAction(setupAction)

self.popMenu.addAction(quitAction)

self.rightButton=False

def set_transparency(self, enabled):

"""

窗口透明度显示实现

"""

if enabled:

self.setAttribute(Qt.WA_Moved, True)

self.setAutoFillBackground(False)

else:

self.setAttribute(Qt.WA_NoSystemBackground, False)

# 下面这种方式好像不行

# pal=QtGui.QPalette()

# pal.setColor(QtGui.QPalette.Background, QColor(127, 127,10,120))

# self.setPalette(pal)

self.setAttribute(Qt.WA_TranslucentBackground, enabled)

self.update()

# self.repaint() no better than self.update()

def resizeEvent(self,e):

"""

重新实现尺寸拖拽事件

"""

self.handleChange()

def handleChange(self):

"""

改变控件大小

"""

self.side = min(self.width(), self.height())

self.w = (self.side-20)/8

def mouseReleaseEvent(self,e):

"""

鼠标释放事件

"""

if self.rightButton == True:

self.rightButton=False

self.popMenu.popup(e.globalPos())

def mouseMoveEvent(self, e):

"""

鼠标移动事件

"""

if e.buttons() & Qt.LeftButton:

self.move(e.globalPos()-self.dragPos)

e.accept()

def mousePressEvent(self, e):

"""

鼠标按下事件

"""

if e.button() == Qt.LeftButton:

self.dragPos=e.globalPos()-self.frameGeometry().topLeft()

e.accept()

if e.button() == Qt.RightButton and self.rightButton == False:

self.rightButton=True

def closeEvent(self,event):

"""

应用于窗口关闭弹出菜单

是对系统默认关闭事件的‘重新实现’

"""

reply = QtGui.QMessageBox.question(self,‘Message‘,‘sure to quit?‘,

QtGui.QMessageBox.Yes|QtGui.QMessageBox.No,QtGui.QMessageBox.No)

if reply==QtGui.QMessageBox.Yes:

event.accept()

else:

event.ignore()

def paintEvent(self,event):

"""

重新实现组件绘制事件

"""

qp = QtGui.QPainter()

#################################

#时钟API接口

timeAPI = TimeM(0,0,0)

self.h = timeAPI.hour

self.m = timeAPI.minute

self.s = timeAPI.second

self.ms = timeAPI.m_second

#时,分,秒显示

self.hour = -((15.0 * ((self.h + self.m/ 60.0)))*16)

self.minute = -((6.0 * (self.m + ((self.s+self.ms/1000)/ 60.0)))*16)

self.second = -(6.0*(self.s+float(self.ms)/1000)*16)

qp.begin(self)

#开始绘制

qp.setRenderHint(QtGui.QPainter.Antialiasing)        #开启抗锯齿

pen = QtGui.QPen(QtGui.QColor(112,166,18),self.w*0.382,QtCore.Qt.SolidLine)

qp.setPen(pen)                             #设置画笔颜色,粗细和线型

qp.drawArc((10+self.w),(10+self.w),(self.side-2*(10+self.w)),(self.side-2*(10+self.w)),90*16,self.second)      #绘制弧线段,x,y,w,h,a,alen

pen = QtGui.QPen(QtGui.QColor(34,113,204),self.w*0.618,QtCore.Qt.SolidLine)

qp.setPen(pen)                             #设置画笔颜色,粗细和线型

qp.drawArc((10+2*self.w),(10+2*self.w),(self.side-2*(10+2*self.w)),(self.side-2*(10+2*self.w)),90*16,self.minute)      #绘制弧线段,x,y,w,h,a,alen

pen = QtGui.QPen(QtGui.QColor(219,92,29),self.w*0.382,QtCore.Qt.SolidLine)

qp.setPen(pen)                             #设置画笔颜色,粗细和线型

qp.drawArc((10+3*self.w),(10+3*self.w),(self.side-2*(10+3*self.w)),(self.side-2*(10+3*self.w)),90*16,self.hour)      #绘制弧线段,x,y,w,h,a,alen

#结束绘制

qp.end()

def setUp(self):

"""

定时,任务,插件等参数设置

"""

pass

def init_Plugins(self):

"""

自动加载插件

管理和运行插件

"""

self.plugin = Platform()

self.plugins = self.plugin.plugins

for x in self.plugins:

Action = QtGui.QAction(QtGui.QIcon(‘Action.png‘),x, self)

Action.triggered.connect(self.plugin.runPlugin)

self.popMenu.addAction(Action)

########################################

#时钟类

#向主类提供时钟API接口

class TimeM(object):

"""

docstring for TimeM

"""

def __init__(self,count_h,count_m,count_s):

super(TimeM, self).__init__()

self.year = 0

self.month = 0

self.day = 0

self.wday = 0

self.yday = 0

self.hour = 0

self.minute = 0

self.second = 0

self.m_second = 0

self.c_h = count_h

self.c_m = count_m

self.c_s = count_s

self.do_What()

def do_What(self):

if (self.c_h==0 and self.c_m==0 and self.c_s==0):

self.now()

else:

self.counter()

def now(self):

t = datetime.datetime.now()

self.year = t.year

self.month = t.month

self.day = t.day

self.hour = t.hour

self.minute = t.minute

self.second = t.second

self.m_second = t.microsecond/1000

self.wday = t.isoweekday()

self.str_time = t.strftime(‘%Y-%m-%d %H:%M:%S‘)

def counter(self):

pass

#######################################

#插件平台

#提供插件API接口

class Platform(SmartDemon):

"""

调用plugins目录下非Zip插件包

该目录下必须包含一个__init__.py空文件和相关插件模块

"""

def __init__(self):

self.plugins=[]

self.loadPlugins()

def sayHello(self, from_):

print "hello from %s." % from_

def sayGoodbye(self, from_):

print "goodbye from %s." % from_

def loadPlugins(self):

for filename in os.listdir("plugins"):

if not filename.endswith(".py") or filename.startswith("_"):

continue

self.plugins.append(filename)            #添加插件列表

def runPlugin(self, filename):

pluginName=os.path.splitext(filename)[0]

plugin=__import__("plugins."+pluginName, fromlist=[pluginName])

clazz=plugin.getPluginClass()

o=clazz()

o.setPlatform(self)

o.start()                         #运行插件start()函数

def shutdown(self):

for o in self.plugins:

o.stop()                      #运行插件stop()函数

o.setPlatform(None)

self.plugins=[]                   #清空插件列表

#############################################

#模块入口主函数

def main_demon():

app = QtGui.QApplication(sys.argv)

demon = SmartDemon(100)

sys.exit(app.exec_())

#############################################

#测试代码

if __name__ == ‘__main__‘:

main_demon()

时间: 2024-10-13 07:31:48

#清空插件列表的相关文章

推荐!Sublime Text 最佳插件列表

推荐!Sublime Text 最佳插件列表 朋友们你们好!我尝试着收集了最佳的ST插件,这些插件真的会改善你的工作流程.我搜索了很多网站,下面是我的成果. 原文链接:http://blog.jobbole.com/79326/ WebInspector 在 JavaScript调试方面,这是一个令人惊讶的工具,Sublime上的完整的代码检查工具.功能:使用绝对路径储存在用户设置中的项目断点,控制台,分步和断点调试器,栈追踪.这些都能够很棒的工作!而且Mozilla还提供了一个插件Firepl

常用的Eclilpse插件列表以及安装方式总结

Eclipse常用插件的安装方式总结: 1.Maven Integration for Eclipse WTP     作用:用来方便开发和使用maven项目.     安装方式:Eclipse Marketplace搜索安装  2.Subclipse     作用:在Eclipse中使用SVN.     安装方式:Eclipse Marketplace搜索安装  3.安装activity插件     作用:支持activity开发.     安装方式:Install New Software的

WorldWind源码剖析系列:插件列表视图类PluginListView和插件列表视图项类PluginListItem

WorldWind中的插件类是个庞大的类,可以说从软件设计层面上统筹可扩展的插件体系的设计思想是WorldWind中的精华,值得学习和借鉴.插件体系中的所用到的类可以分为两大类,一类是插件类Plugin及其派生类,另外一类是插件类中的界面类,如PluginDialog.PluginInstallDialog.插件列表视图类PluginListView和插件列表视图项类PluginListItem等.这些类之间的关联关系图如下所示.本节主要介绍插件类中的界面类. 插件列表视图类PluginList

iOS插件列表

插件安装的路径:~/Library/Application Support/Developer/Shared/Xcode - Alcatraz插件管理神器https://github.com/alcatraz/Alcatraz - VVDocumenter-Xcode代码注释神器https://github.com/onevcat/VVDocumenter-Xcode - KSImageNamed-Xcode图片名引出工具https://github.com/ksuther/KSImageNam

Sublime Text 最佳插件列表(转)

Package Control 安装方法 首先通过快捷键 ctrl+` 或者 View > Show Console 打开控制台,然后粘贴相应的 Python 安装代码. Sublime Text 2 安装代码: import urllib2,os; pf='Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp)

ECMall插件列表

以下插件均来自[卓流应用网] ecmall 敏感词过滤功能插件 ecmall 防SQL注入插件 ecmall 商品对比 ecmall  会员菜单插件 ecmall 多功能自定义属性 ecmall 用户手机验证绑定功 ecmall 超级管理员插件 ecmall 一键登录插件功能 ecmall 商家店铺手机短信/短信订单通知功能插件 ecmall 积分兑换 积分商城 ecmall 运费配置功能 ecmall 余额支付插件功能 ecmall 买家退款退货功能 ecmall 资金管理功能 ecmall

常用Atom插件列表

1.simplified-chinese-menu Atom的简体中文语言包,完整汉化,兼容所有已发布的版本Atom. 2.tree-view-finder 左边菜单栏显示方式,类似Mac OS下的finder. 3.minimap 类似sublim text右边的代码缩略图. 4.linter和linter-jshint 该插件是用jshint来检查代码,想必大家都听说过jshint代码检查工具,它有一个配置文件.jshintrc,这个文件告诉jshint执行的检查规则.通过jshint能发现

The ultimate jQuery Plugin List(终极jQuery插件列表)

下面的文章可能出自一位奥地利的作者,  列出很多jQuery的插件.类似的网站:http://jquerylist.com/原文地址: http://www.kollermedia.at/archive/2007/11/21/the-ultimate-jquery-plugin-list/ jQuery is definitely my favourite Javascript Library and this ultimate jQuery Plugin List is for all oth

metronic后台模板学习 -- 所用外部插件列表

插件名称 描述 URL jQuery 1.11.0 js库,不用介绍了 http://www.jquery.com jQuery Migrate plugin 1.2.1 jQuery 老版本过渡迁移插件 http://www.jquery.com Twitter Bootstrap v3.3.4 Bootstrap, 不用介绍了 http://getbootstrap.com Select2 v3.4.6 Select2, 基于jQuery的一个插件,支持搜索,远程搜索,以及结果翻页. htt