pyqt5 对话框


  1. from PyQt5.QtGui import QIcon
  2. from PyQt5.QtWidgets import (QAction, QApplication, QCheckBox, QComboBox,
  3.         QDialog, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit,
  4.         QMessageBox, QMenu, QPushButton, QSpinBox, QStyle, QSystemTrayIcon,
  5.         QTextEdit, QVBoxLayout)

  6. import systray_rc


  7. class Window(QDialog):
  8.     def __init__(self):
  9.         super(Window, self).__init__()

  10.         self.createIconGroupBox()
  11.         self.createMessageGroupBox()

  12.         self.iconLabel.setMinimumWidth(self.durationLabel.sizeHint().width())

  13.         self.createActions()
  14.         self.createTrayIcon()

  15.         self.showMessageButton.clicked.connect(self.showMessage)
  16.         self.showIconCheckBox.toggled.connect(self.trayIcon.setVisible)
  17.         self.iconComboBox.currentIndexChanged.connect(self.setIcon)
  18.         self.trayIcon.messageClicked.connect(self.messageClicked)
  19.         self.trayIcon.activated.connect(self.iconActivated)

  20.         mainLayout = QVBoxLayout()
  21.         mainLayout.addWidget(self.iconGroupBox)
  22.         mainLayout.addWidget(self.messageGroupBox)
  23.         self.setLayout(mainLayout)

  24.         self.iconComboBox.setCurrentIndex(1)
  25.         self.trayIcon.show()

  26.         self.setWindowTitle("Systray")
  27.         self.resize(400, 300)

  28.     def setVisible(self, visible):
  29.         self.minimizeAction.setEnabled(visible)
  30.         self.maximizeAction.setEnabled(not self.isMaximized())
  31.         self.restoreAction.setEnabled(self.isMaximized() or not visible)
  32.         super(Window, self).setVisible(visible)

  33.     def closeEvent(self, event):
  34.         if self.trayIcon.isVisible():
  35.             QMessageBox.information(self, "Systray",
  36.                     "The program will keep running in the system tray. To "
  37.                     "terminate the program, choose Quit in the "
  38.                     "context menu of the system tray entry.")
  39.             self.hide()
  40.             event.ignore()

  41.     def setIcon(self, index):
  42.         icon = self.iconComboBox.itemIcon(index)
  43.         self.trayIcon.setIcon(icon)
  44.         self.setWindowIcon(icon)

  45.         self.trayIcon.setToolTip(self.iconComboBox.itemText(index))

  46.     def iconActivated(self, reason):
  47.         if reason in (QSystemTrayIcon.Trigger, QSystemTrayIcon.DoubleClick):
  48.             self.iconComboBox.setCurrentIndex(
  49.                     (self.iconComboBox.currentIndex() + 1)
  50.                     % self.iconComboBox.count())
  51.         elif reason == QSystemTrayIcon.MiddleClick:
  52.             self.showMessage()

  53.     def showMessage(self):
  54.         icon = QSystemTrayIcon.MessageIcon(
  55.                 self.typeComboBox.itemData(self.typeComboBox.currentIndex()))
  56.         self.trayIcon.showMessage(self.titleEdit.text(),
  57.                 self.bodyEdit.toPlainText(), icon,
  58.                 self.durationSpinBox.value() * 1000)

  59.     def messageClicked(self):
  60.         QMessageBox.information(None, "Systray",
  61.                 "Sorry, I already gave what help I could.\nMaybe you should "
  62.                 "try asking a human?")

  63.     def createIconGroupBox(self):
  64.         self.iconGroupBox = QGroupBox("Tray Icon")

  65.         self.iconLabel = QLabel("Icon:")

  66.         self.iconComboBox = QComboBox()
  67.         self.iconComboBox.addItem(QIcon(':/images/bad.png'), "Bad")
  68.         self.iconComboBox.addItem(QIcon(':/images/heart.png'), "Heart")
  69.         self.iconComboBox.addItem(QIcon(':/images/trash.png'), "Trash")

  70.         self.showIconCheckBox = QCheckBox("Show icon")
  71.         self.showIconCheckBox.setChecked(True)

  72.         iconLayout = QHBoxLayout()
  73.         iconLayout.addWidget(self.iconLabel)
  74.         iconLayout.addWidget(self.iconComboBox)
  75.         iconLayout.addStretch()
  76.         iconLayout.addWidget(self.showIconCheckBox)
  77.         self.iconGroupBox.setLayout(iconLayout)

  78.     def createMessageGroupBox(self):
  79.         self.messageGroupBox = QGroupBox("Balloon Message")

  80.         typeLabel = QLabel("Type:")

  81.         self.typeComboBox = QComboBox()
  82.         self.typeComboBox.addItem("None", QSystemTrayIcon.NoIcon)
  83.         self.typeComboBox.addItem(self.style().standardIcon(
  84.                 QStyle.SP_MessageBoxInformation), "Information",
  85.                 QSystemTrayIcon.Information)
  86.         self.typeComboBox.addItem(self.style().standardIcon(
  87.                 QStyle.SP_MessageBoxWarning), "Warning",
  88.                 QSystemTrayIcon.Warning)
  89.         self.typeComboBox.addItem(self.style().standardIcon(
  90.                 QStyle.SP_MessageBoxCritical), "Critical",
  91.                 QSystemTrayIcon.Critical)
  92.         self.typeComboBox.setCurrentIndex(1)

  93.         self.durationLabel = QLabel("Duration:")

  94.         self.durationSpinBox = QSpinBox()
  95.         self.durationSpinBox.setRange(5, 60)
  96.         self.durationSpinBox.setSuffix(" s")
  97.         self.durationSpinBox.setValue(15)

  98.         durationWarningLabel = QLabel("(some systems might ignore this hint)")
  99.         durationWarningLabel.setIndent(10)

  100.         titleLabel = QLabel("Title:")

  101.         self.titleEdit = QLineEdit("Cannot connect to network")

  102.         bodyLabel = QLabel("Body:")

  103.         self.bodyEdit = QTextEdit()
  104.         self.bodyEdit.setPlainText("Don't believe me. Honestly, I don't have "
  105.                 "a clue.\nClick this balloon for details.")

  106.         self.showMessageButton = QPushButton("Show Message")
  107.         self.showMessageButton.setDefault(True)

  108.         messageLayout = QGridLayout()
  109.         messageLayout.addWidget(typeLabel, 0, 0)
  110.         messageLayout.addWidget(self.typeComboBox, 0, 1, 1, 2)
  111.         messageLayout.addWidget(self.durationLabel, 1, 0)
  112.         messageLayout.addWidget(self.durationSpinBox, 1, 1)
  113.         messageLayout.addWidget(durationWarningLabel, 1, 2, 1, 3)
  114.         messageLayout.addWidget(titleLabel, 2, 0)
  115.         messageLayout.addWidget(self.titleEdit, 2, 1, 1, 4)
  116.         messageLayout.addWidget(bodyLabel, 3, 0)
  117.         messageLayout.addWidget(self.bodyEdit, 3, 1, 2, 4)
  118.         messageLayout.addWidget(self.showMessageButton, 5, 4)
  119.         messageLayout.setColumnStretch(3, 1)
  120.         messageLayout.setRowStretch(4, 1)
  121.         self.messageGroupBox.setLayout(messageLayout)

  122.     def createActions(self):
  123.         self.minimizeAction = QAction("Mi&nimize", self, triggered=self.hide)
  124.         self.maximizeAction = QAction("Ma&ximize", self,
  125.                 triggered=self.showMaximized)
  126.         self.restoreAction = QAction("&Restore", self,
  127.                 triggered=self.showNormal)
  128.         self.quitAction = QAction("&Quit", self,
  129.                 triggered=QApplication.instance().quit)

  130.     def createTrayIcon(self):
  131.          self.trayIconMenu = QMenu(self)
  132.          self.trayIconMenu.addAction(self.minimizeAction)
  133.          self.trayIconMenu.addAction(self.maximizeAction)
  134.          self.trayIconMenu.addAction(self.restoreAction)
  135.          self.trayIconMenu.addSeparator()
  136.          self.trayIconMenu.addAction(self.quitAction)

  137.          self.trayIcon = QSystemTrayIcon(self)
  138.          self.trayIcon.setContextMenu(self.trayIconMenu)


  139. if __name__ == '__main__':

  140.     import sys

  141.     app = QApplication(sys.argv)

  142.     if not QSystemTrayIcon.isSystemTrayAvailable():
  143.         QMessageBox.critical(None, "Systray",
  144.                 "I couldn't detect any system tray on this system.")
  145.         sys.exit(1)

  146.     QApplication.setQuitOnLastWindowClosed(False)

  147.     window = Window()
  148.     window.show()
  149.     sys.exit(app.exec_())


pyqt5 对话框_第1张图片

你可能感兴趣的:(pyqt)