前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python实现系统桌面时钟

Python实现系统桌面时钟

作者头像
py3study
发布2020-01-07 11:00:14
2.9K0
发布2020-01-07 11:00:14
举报
文章被收录于专栏:python3python3

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

功能:

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

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

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

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

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

运行需要Python2.7 + PyQt4.

代码语言:javascript
复制
__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_( ))
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档