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,源代码,鼠标,utf-8,应用程序)