python+PyQT实现系统桌面时钟

yipeiwu_com6年前Python基础

用Python + PyQT写的一个系统桌面时钟,刚学习Python,写的比较简陋,但是基本的功能还可以。

功能:

①窗体在应用程序最上层,不用但是打开其他应用后看不到时间

②左键双击全屏,可以做小屏保使用,再次双击退出全屏。

③系统托盘图标,主要参考PyQt4源码目录中的PyQt4\examples\desktop\systray下的程序

④鼠标右键,将程序最小化

使用时需要heart.svg放在源代码同级目录下,[文件可在PyQt4示例代码目录下PyQt4\examples\desktop\systray\images找到

运行需要Python2.7 + PyQt4.

__metaclass__ = type 
#!coding= utf-8 
#http://blog.csdn.net/gatieme/article/details/17659259 
#gatieme 
 
 
import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
 
 
#-------------------------------------------------------------------------------- 
class SystemTrayIcon(QSystemTrayIcon): 
  """ 
  The systemTrayIcon which uesd to connect the clock 
  """ 
  #---------------------------------------------------------------------------- 
  def __init__(self, mainWindow, parent = None): 
    """ 
    mainWindow : the main window that the system tray icon serves to 
    """   
    super(SystemTrayIcon, self).__init__(parent) 
    self.window = mainWindow 
    self.setIcon(QIcon("heart.svg"))  # set the icon of the systemTrayIcon 
     
    self.createActions( ) 
    self.createTrayMenu( ) 
     
    self.connect(self, SIGNAL("doubleClicked"), self.window, SLOT("showNormal")) 
    #self.connect(self, SIGNAL("activated( )"), self, SLOT("slot_iconActivated")) 
     
 
  def createActions(self): 
    """ 
    create some action to Max Min Normal show the window 
    """ 
    self.minimizeAction = QAction("Mi&nimize", self.window, triggered = self.window.hide) 
    self.maximizeAction = QAction("Ma&ximize", self.window, triggered = self.window.showMaximized) 
    self.restoreAction = QAction("&Restore", self.window, triggered = self.window.showNormal) 
    self.quitAction = QAction("&Quit", self.window, triggered = qApp.quit) 
         
 
  def createTrayMenu(self): 
     self.trayIconMenu = QMenu(self.window) 
     self.trayIconMenu.addAction(self.minimizeAction) 
     self.trayIconMenu.addAction(self.maximizeAction) 
     self.trayIconMenu.addAction(self.restoreAction) 
     self.trayIconMenu.addSeparator( ) 
     self.trayIconMenu.addAction(self.quitAction) 
 
     self.setContextMenu(self.trayIconMenu) 
   
  def setVisible(self, visible): 
    self.minimizeAction.setEnabled(not visible) 
    self.maximizeAction.setEnabled(not self.window.isMaximized()) 
    self.restoreAction.setEnabled(self.window.isMaximized() or not visible) 
    super(Window, self).setVisible(visible) 
 
 
 
  def closeEvent(self, event): 
    #if event.button( ) == Qt.RightButton: 
    self.showMessage("Message", 
        "The program will keep running in the system tray. To " 
        "terminate the program, choose <b>Quit</b> in the " 
        "context menu of the system tray entry.",  
        QSystemTrayIcon.Information, 5000) 
    self.window.hide( ) 
    event.ignore( ) 
 
  def slot_iconActivated(self, reason): 
    if reason == QSystemTrayIcon.DoubleClick: 
      self.wiondow.showNormal( ) 
 
 
 
#-------------------------------------------------------------------------------- 
class DigitClock(QLCDNumber): 
  """ 
  the DigitClock show a digit clock int the printer 
  """ 
   
  #---------------------------------------------------------------------------- 
  def __init__(self, parent = None): 
    """ 
    the constructor function of the DigitClock 
    """ 
    super(DigitClock, self).__init__(parent) 
    pale = self.palette( ) 
 
    pale.setColor(QPalette.Window, QColor(100, 180, 100)) 
    self.setPalette(pale) 
     
    self.setNumDigits(19) 
    self.systemTrayIcon = SystemTrayIcon(mainWindow = self) 
 
     
    self.dragPosition = None; 
    self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.Popup | Qt.Tool) 
    self.setWindowOpacity(1) 
     
    self.showTime( )      # print the time when the clock show 
    self.systemTrayIcon.show( ) # show the SystemTaryIcon when the clock show  
 
    self.timer = QTimer( ) 
    self.connect(self.timer, SIGNAL("timeout( )"), self.showTime) 
    self.timer.start(1000) 
     
    self.resize(500, 60) 
     
   
  #---------------------------------------------------------------------------- 
  def showTime(self): 
    """ 
    show the current time 
    """ 
    self.date = QDate.currentDate( ) 
    self.time = QTime.currentTime( ) 
    text = self.date.toString("yyyy-MM-dd") + " " + self.time.toString("hh:mm:ss") 
    self.display(text) 
 
     
 
  #---------------------------------------------------------------------------- 
  def mousePressEvent(self, event): 
    """ 
    clicked the left mouse to move the clock 
    clicked the right mouse to hide the clock 
    """ 
    if event.button( ) == Qt.LeftButton: 
      self.dragPosition = event.globalPos( ) - self.frameGeometry( ).topLeft( ) 
      event.accept( ) 
    elif event.button( ) == Qt.RightButton: 
      self.systemTrayIcon.closeEvent(event) 
 
      #self.systemTrayIcon.hide( ) 
      #self.close( ) 
 
  def mouseMoveEvent(self, event): 
    """ 
    """ 
    if event.buttons( ) & Qt.LeftButton: 
      self.move(event.globalPos( ) - self.dragPosition) 
      event.accept( ) 
   
  def keyPressEvent(self, event): 
    """ 
    you can enter "ESC" to normal show the window, when the clock is Maxmize 
    """ 
    if event.key() == Qt.Key_Escape and self.isMaximized( ): 
      self.showNormal( ) 
 
  def mouseDoubleClickEvent(self, event): 
    """ 
    """ 
    if event.buttons() == Qt.LeftButton: 
      if self.isMaximized( ): 
        self.showNormal( ) 
      else: 
        self.showMaximized( ) 
   
if __name__ == "__main__": 
  app = QApplication(sys.argv) 
   
  digitClock = DigitClock( ) 
  digitClock.show( )   
   
  sys.exit(app.exec_( )) 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python实现DDos攻击实例详解

Python实现DDos攻击实例详解

SYN 泛洪攻击 SYN泛洪攻击是一种比较常用的Dos方式之一。通过发送大量伪造的 TCP 连接请求,使被攻击主机资源耗尽(通常是 CPU 满负荷或内存不足)的攻击方式 我们都知道建立...

Python数据结构与算法之图的基本实现及迭代器实例详解

Python数据结构与算法之图的基本实现及迭代器实例详解

本文实例讲述了Python数据结构与算法之图的基本实现及迭代器。分享给大家供大家参考,具体如下: 这篇文章参考自《复杂性思考》一书的第二章,并给出这一章节里我的习题解答。 (这书不到12...

Python使用正则表达式获取网页中所需要的信息

使用正则表达式的几个步骤: 1、用import re 导入正则表达式模块; 2、用re.compile()函数创建一个Regex对象; 3、用Regex对象的search()或finda...

基于python requests库中的代理实例讲解

直接上代码: #request代理(proxy) """ 1.启动代理服务器Heroku,相当于aliyun 2.在主机1080端口启动Socks 服务 3.将请求转发到1080端口...

学Python 3的理由和必要性

Python很多年前就已经出现了,并且还在不断发展。本书第1版基 于Python 1.5.2,Python 2.x作为主流版本已经持续了很多年。本书是基 于Python 3.6的,并在P...