zoukankan      html  css  js  c++  java
  • PYQT4 : QSystemTrayIcon练习

    照着demo自己做了一遍,练练手

    import sys
    from PyQt4 import QtGui
    from PyQt4 import QtCore
    
    
    class SysTray(QtGui.QDialog):
        def __init__(self, parent=None):
            super(SysTray, self).__init__(parent)
            self.createIconGroupBox()
            self.createMessageGroupBox()
            self.createActions()
            self.createSysTray()
    
            mainLayout = QtGui.QVBoxLayout()
            mainLayout.addWidget(self.iconGroupBox)
            mainLayout.addWidget(self.messageGroupBox)
            self.setLayout(mainLayout)
    
            self.showMessageButton.clicked.connect(self.showMessage)
            self.iconCheckBox.stateChanged.connect(self.showIcon)
            # 即时刷新Tray Icon
            self.iconComboBox.currentIndexChanged.connect(self.setIcon)
            self.iconComboBox.setCurrentIndex(1)
    
            self.trayIcon.activated.connect(self.iconActivated)
    
            self.trayIcon.show()
            self.resize(400, 300)
            self.setWindowTitle("Systray")
    
        def setIcon(self, index):
            icon = self.iconComboBox.itemIcon(index)
            self.trayIcon.setIcon(icon)
            self.setWindowIcon(icon)
            self.trayIcon.setToolTip(self.iconComboBox.itemText(index))
    
        def showIcon(self, i):
            # Unchecked:i=0 Checked=2
            if i == QtCore.Qt.Unchecked:
                self.trayIcon.hide()
            else:
                self.trayIcon.show()
    
        def iconActivated(self, reason):
            # 切换图标
            if reason in (QtGui.QSystemTrayIcon.Trigger, QtGui.QSystemTrayIcon.DoubleClick):
                max = self.iconComboBox.count()
                current = self.iconComboBox.currentIndex() + 1
                if current == max:
                    current = 0
                self.iconComboBox.setCurrentIndex(current)
    
        def showMessage(self):
            icon = self.typeComboBox.itemData(self.typeComboBox.currentIndex())
            self.trayIcon.showMessage(self.titleLine.text(), self.bodyText.toPlainText(), icon, self.durationSpin.value())
    
        def closeEvent(self, event):
            # 重新定义“X”动作,如果iconCheckBox unchecked 就关闭窗口
            if self.trayIcon.isVisible():
                QtGui.QMessageBox.information(self, "SysTray",
                                              "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.")
                self.hide()
                event.ignore()
    
        def createActions(self):
            self.minimizeAction = QtGui.QAction("Mi&nimize", self, triggered=self.showMinimized)
            self.maximumAction = QtGui.QAction("Ma&ximum", self, triggered=self.showMaximized)
            self.restoreAction = QtGui.QAction("&Restore", self, triggered=self.showNormal)
            self.quitAction = QtGui.QAction("&Quit", self, triggered=QtGui.qApp.quit)
    
        def createSysTray(self):
            self.trayIconMenu = QtGui.QMenu(self)
            self.trayIconMenu.addAction(self.minimizeAction)
            self.trayIconMenu.addAction(self.maximumAction)
            self.trayIconMenu.addAction(self.restoreAction)
            self.trayIconMenu.addSeparator()
            self.trayIconMenu.addAction(self.quitAction)
    
            self.trayIcon = QtGui.QSystemTrayIcon(self)
            self.trayIcon.setContextMenu(self.trayIconMenu)
    
        def createIconGroupBox(self):
            self.iconGroupBox = QtGui.QGroupBox('Tray Box')
    
            self.iconLabel = QtGui.QLabel('Icon: ')
            self.iconComboBox = QtGui.QComboBox()
            self.iconComboBox.addItem(QtGui.QIcon('resource/heart.svg'), 'heart')
            self.iconComboBox.addItem(QtGui.QIcon('resource/trash.svg'), 'trash')
            self.iconComboBox.addItem(QtGui.QIcon('resource/bad.svg'), 'bad')
    
            self.iconCheckBox = QtGui.QCheckBox('Show Icon')
            self.iconCheckBox.setChecked(True)
    
            iconLayout = QtGui.QHBoxLayout()
            iconLayout.addWidget(self.iconLabel)
            iconLayout.addWidget(self.iconComboBox)
            iconLayout.addStretch()
            iconLayout.addWidget(self.iconCheckBox)
    
            self.iconGroupBox.setLayout(iconLayout)
    
        def createMessageGroupBox(self):
            self.messageGroupBox = QtGui.QGroupBox('Ballon Message')
            self.typeLabel = QtGui.QLabel('Type: ')
            #addItem (QString, QVariant)
            #addItem (QIcon, QString, QVariant)
            #QVariant QComboBox.itemData(int)
            #这里的QVariant很重要,保存了大量大数据类型
            self.typeComboBox = QtGui.QComboBox()
            self.typeComboBox.addItem("None", QtGui.QSystemTrayIcon.NoIcon)
            self.typeComboBox.addItem(
                self.style().standardIcon(QtGui.QStyle.SP_MessageBoxInformation), 'Informathion',
                QtGui.QSystemTrayIcon.Information)
            self.typeComboBox.addItem(
                self.style().standardIcon(QtGui.QStyle.SP_MessageBoxWarning), 'Warniing', QtGui.QSystemTrayIcon.Warning)
            self.typeComboBox.addItem(
                self.style().standardIcon(QtGui.QStyle.SP_MessageBoxCritical), 'Critical', QtGui.QSystemTrayIcon.Critical)
            self.typeComboBox.setCurrentIndex(1)
    
            self.durationLabel = QtGui.QLabel('Duration: ')
            self.durationSpin = QtGui.QSpinBox()
            self.durationSpin.setSuffix('s')
            self.durationSpin.setRange(5, 15)
            self.durationDescLabel = QtGui.QLabel('some systems might ignore this hint')
            self.titleLabel = QtGui.QLabel('Title')
            self.titleLine = QtGui.QLineEdit('Cannot connect to network')
            self.bodyLabel = QtGui.QLabel('Body: ')
            self.bodyText = QtGui.QTextEdit()
            self.bodyText.setPlainText("Don't believe me. Honestly, I don't have "
                                       "a clue.
    Click this balloon for details.")
            self.showMessageButton = QtGui.QPushButton('Show Message')
            self.showMessageButton.setDefault(True)
    
            messageGroupLayout = QtGui.QGridLayout()
            messageGroupLayout.addWidget(self.typeLabel, 0, 0)
            messageGroupLayout.addWidget(self.typeComboBox, 0, 1, 1, 2)
            messageGroupLayout.addWidget(self.durationLabel, 1, 0)
            messageGroupLayout.addWidget(self.durationSpin, 1, 1)
            messageGroupLayout.addWidget(self.durationDescLabel, 1, 2, 1, 3)
            messageGroupLayout.addWidget(self.titleLabel, 2, 0)
            messageGroupLayout.addWidget(self.titleLine, 2, 1, 1, 4)
            messageGroupLayout.addWidget(self.bodyLabel, 3, 0)
            messageGroupLayout.addWidget(self.bodyText, 3, 1, 2, 4)
            messageGroupLayout.addWidget(self.showMessageButton, 5, 4)
            # 设置拉伸的基准
            messageGroupLayout.setColumnStretch(3, 1)
            messageGroupLayout.setRowStretch(4, 1)
    
            self.messageGroupBox.setLayout(messageGroupLayout)
    
    
    if __name__ == '__main__':
        app = QtGui.QApplication(sys.argv)
        tray = SysTray()
        tray.show()
        sys.exit(app.exec_())

  • 相关阅读:
    leetcode-788-Rotated Digits(使用vector替代if else的逐个判断)
    leetcode-771-Jewels and Stones(建立哈希表,降低时间复杂度)
    leetcode-766-Toeplitz Matrix(每一条对角线元素的比较)
    leetcode-762-Prime Number of Set Bits in Binary Representation
    leetcode-747-Largest Number At Least Twice of Others(求vector的最大值和次大值)
    Flink中逻辑计划和物理计划的概念划分和对应关系
    Java线程池中线程的生命周期
    在ServletFilter层返回多字段提示给前端
    JavaBIO利用装饰器模式来组织和扩展接口
    SparkShuffle机制
  • 原文地址:https://www.cnblogs.com/lkpp/p/7400038.html
Copyright © 2011-2022 走看看