aboutsummaryrefslogtreecommitdiffstats
path: root/examples/widgets/systray/window.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/widgets/systray/window.py')
-rw-r--r--examples/widgets/systray/window.py273
1 files changed, 0 insertions, 273 deletions
diff --git a/examples/widgets/systray/window.py b/examples/widgets/systray/window.py
deleted file mode 100644
index 828aebecd..000000000
--- a/examples/widgets/systray/window.py
+++ /dev/null
@@ -1,273 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2020 The Qt Company Ltd.
-## Contact: http://www.qt.io/licensing/
-##
-## This file is part of the Qt for Python examples of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:BSD$
-## You may use this file under the terms of the BSD license as follows:
-##
-## "Redistribution and use in source and binary forms, with or without
-## modification, are permitted provided that the following conditions are
-## met:
-## * Redistributions of source code must retain the above copyright
-## notice, this list of conditions and the following disclaimer.
-## * Redistributions in binary form must reproduce the above copyright
-## notice, this list of conditions and the following disclaimer in
-## the documentation and/or other materials provided with the
-## distribution.
-## * Neither the name of The Qt Company Ltd nor the names of its
-## contributors may be used to endorse or promote products derived
-## from this software without specific prior written permission.
-##
-##
-## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-from PySide6.QtCore import Slot
-from PySide6.QtGui import QAction, QIcon
-from PySide6.QtWidgets import (QCheckBox, QComboBox, QDialog,
- QGridLayout, QGroupBox, QHBoxLayout, QLabel,
- QLineEdit, QMenu, QMessageBox, QPushButton,
- QSpinBox, QStyle, QSystemTrayIcon, QTextEdit,
- QVBoxLayout)
-
-import rc_systray
-
-
-class Window(QDialog):
- def __init__(self, parent=None):
- super().__init__(parent)
-
- self._icon_group_box = QGroupBox()
- self._icon_label = QLabel()
- self._icon_combo_box = QComboBox()
- self._show_icon_check_box = QCheckBox()
-
- self._message_group_box = QGroupBox()
- self._type_label = QLabel()
- self._duration_label = QLabel()
- self._duration_warning_label = QLabel()
- self._title_label = QLabel()
- self._body_label = QLabel()
-
- self._type_combo_box = QComboBox()
- self._duration_spin_box = QSpinBox()
- self._title_edit = QLineEdit()
- self._body_edit = QTextEdit()
- self._show_message_button = QPushButton()
-
- self._minimize_action = QAction()
- self._maximize_action = QAction()
- self._restore_action = QAction()
- self._quit_action = QAction()
-
- self._tray_icon = QSystemTrayIcon()
- self._tray_icon_menu = QMenu()
-
- self.create_icon_group_box()
- self.create_message_group_box()
-
- self._icon_label.setMinimumWidth(self._duration_label.sizeHint().width())
-
- self.create_actions()
- self.create_tray_icon()
-
- self._show_message_button.clicked.connect(self.show_message)
- self._show_icon_check_box.toggled.connect(self._tray_icon.setVisible)
- self._icon_combo_box.currentIndexChanged.connect(self.set_icon)
- self._tray_icon.messageClicked.connect(self.message_clicked)
- self._tray_icon.activated.connect(self.icon_activated)
-
- self._main_layout = QVBoxLayout()
- self._main_layout.addWidget(self._icon_group_box)
- self._main_layout.addWidget(self._message_group_box)
- self.setLayout(self._main_layout)
-
- self._icon_combo_box.setCurrentIndex(1)
- self._tray_icon.show()
-
- self.setWindowTitle("Systray")
- self.resize(400, 300)
-
- def setVisible(self, visible):
- self._minimize_action.setEnabled(visible)
- self._maximize_action.setEnabled(not self.isMaximized())
- self._restore_action.setEnabled(self.isMaximized() or not visible)
- super().setVisible(visible)
-
- def closeEvent(self, event):
- if not event.spontaneous() or not self.isVisible():
- return
- if self._tray_icon.isVisible():
- 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()
-
- @Slot(int)
- def set_icon(self, index):
- icon = self._icon_combo_box.itemIcon(index)
- self._tray_icon.setIcon(icon)
- self.setWindowIcon(icon)
- self._tray_icon.setToolTip(self._icon_combo_box.itemText(index))
-
- @Slot(str)
- def icon_activated(self, reason):
- if reason == QSystemTrayIcon.Trigger:
- pass
- if reason == QSystemTrayIcon.DoubleClick:
- self._icon_combo_box.setCurrentIndex(
- (self._icon_combo_box.currentIndex() + 1) % self._icon_combo_box.count()
- )
- if reason == QSystemTrayIcon.MiddleClick:
- self.show_message()
-
- @Slot()
- def show_message(self):
- self._show_icon_check_box.setChecked(True)
- selected_icon = self._type_combo_box.itemData(self._type_combo_box.currentIndex())
- msg_icon = QSystemTrayIcon.MessageIcon(selected_icon)
-
- if selected_icon == -1: # custom icon
- icon = QIcon(self._icon_combo_box.itemIcon(self._icon_combo_box.currentIndex()))
- self._tray_icon.showMessage(
- self._title_edit.text(),
- self._body_edit.toPlainText(),
- icon,
- self._duration_spin_box.value() * 1000,
- )
- else:
- self._tray_icon.showMessage(
- self._title_edit.text(),
- self._body_edit.toPlainText(),
- msg_icon,
- self._duration_spin_box.value() * 1000,
- )
-
- @Slot()
- def message_clicked(self):
- QMessageBox.information(None, "Systray",
- "Sorry, I already gave what help I could.\n"
- "Maybe you should try asking a human?")
-
- def create_icon_group_box(self):
- self._icon_group_box = QGroupBox("Tray Icon")
-
- self._icon_label = QLabel("Icon:")
-
- self._icon_combo_box = QComboBox()
- self._icon_combo_box.addItem(QIcon(":/images/bad.png"), "Bad")
- self._icon_combo_box.addItem(QIcon(":/images/heart.png"), "Heart")
- self._icon_combo_box.addItem(QIcon(":/images/trash.png"), "Trash")
-
- self._show_icon_check_box = QCheckBox("Show icon")
- self._show_icon_check_box.setChecked(True)
-
- icon_layout = QHBoxLayout()
- icon_layout.addWidget(self._icon_label)
- icon_layout.addWidget(self._icon_combo_box)
- icon_layout.addStretch()
- icon_layout.addWidget(self._show_icon_check_box)
- self._icon_group_box.setLayout(icon_layout)
-
- def create_message_group_box(self):
- self._message_group_box = QGroupBox("Balloon Message")
-
- self._type_label = QLabel("Type:")
-
- self._type_combo_box = QComboBox()
- self._type_combo_box.addItem("None", QSystemTrayIcon.NoIcon)
- self._type_combo_box.addItem(
- self.style().standardIcon(QStyle.SP_MessageBoxInformation),
- "Information",
- QSystemTrayIcon.Information,
- )
- self._type_combo_box.addItem(
- self.style().standardIcon(QStyle.SP_MessageBoxWarning),
- "Warning",
- QSystemTrayIcon.Warning,
- )
- self._type_combo_box.addItem(
- self.style().standardIcon(QStyle.SP_MessageBoxCritical),
- "Critical",
- QSystemTrayIcon.Critical,
- )
- self._type_combo_box.addItem(QIcon(), "Custom icon", -1)
- self._type_combo_box.setCurrentIndex(1)
-
- self._duration_label = QLabel("Duration:")
-
- self._duration_spin_box = QSpinBox()
- self._duration_spin_box.setRange(5, 60)
- self._duration_spin_box.setSuffix(" s")
- self._duration_spin_box.setValue(15)
-
- self._duration_warning_label = QLabel("(some systems might ignore this hint)")
- self._duration_warning_label.setIndent(10)
-
- self._title_label = QLabel("Title:")
- self._title_edit = QLineEdit("Cannot connect to network")
- self._body_label = QLabel("Body:")
-
- self._body_edit = QTextEdit()
- self._body_edit.setPlainText("Don't believe me. Honestly, I don't have a clue."
- "\nClick this balloon for details.")
-
- self._show_message_button = QPushButton("Show Message")
- self._show_message_button.setDefault(True)
-
- message_layout = QGridLayout()
- message_layout.addWidget(self._type_label, 0, 0)
- message_layout.addWidget(self._type_combo_box, 0, 1, 1, 2)
- message_layout.addWidget(self._duration_label, 1, 0)
- message_layout.addWidget(self._duration_spin_box, 1, 1)
- message_layout.addWidget(self._duration_warning_label, 1, 2, 1, 3)
- message_layout.addWidget(self._title_label, 2, 0)
- message_layout.addWidget(self._title_edit, 2, 1, 1, 4)
- message_layout.addWidget(self._body_label, 3, 0)
- message_layout.addWidget(self._body_edit, 3, 1, 2, 4)
- message_layout.addWidget(self._show_message_button, 5, 4)
- message_layout.setColumnStretch(3, 1)
- message_layout.setRowStretch(4, 1)
- self._message_group_box.setLayout(message_layout)
-
- def create_actions(self):
- self._minimize_action = QAction("Minimize", self)
- self._minimize_action.triggered.connect(self.hide)
-
- self._maximize_action = QAction("Maximize", self)
- self._maximize_action.triggered.connect(self.showMaximized)
-
- self._restore_action = QAction("Restore", self)
- self._restore_action.triggered.connect(self.showNormal)
-
- self._quit_action = QAction("Quit", self)
- self._quit_action.triggered.connect(qApp.quit)
-
- def create_tray_icon(self):
- self._tray_icon_menu = QMenu(self)
- self._tray_icon_menu.addAction(self._minimize_action)
- self._tray_icon_menu.addAction(self._maximize_action)
- self._tray_icon_menu.addAction(self._restore_action)
- self._tray_icon_menu.addSeparator()
- self._tray_icon_menu.addAction(self._quit_action)
-
- self._tray_icon = QSystemTrayIcon(self)
- self._tray_icon.setContextMenu(self._tray_icon_menu)