pyqt-todolist/test/SystemTray.py

129 lines
3.9 KiB
Python
Raw Normal View History

2022-04-26 17:07:00 +08:00
import os
import sys
from PyQt5 import QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import (
QApplication, QMainWindow,
QLabel, QGridLayout, QWidget,
QCheckBox, QSystemTrayIcon, QFormLayout,
QSpacerItem, QSizePolicy, QMenu, QAction, QStyle, QDialog, QPushButton, QMessageBox)
class MessageBox(QMessageBox):
def __init__(self):
super(MessageBox, self).__init__()
save_config = QCheckBox('记住选择')
self.layout().addWidget(save_config)
class SystemTray(QWidget):
def __init__(self):
super(SystemTray, self).__init__()
self.resize(500, 400)
# layout = QFormLayout()
# # self.setLayout(layout)
#
# label = QLabel('最小化到系统托盘?')
# layout.addRow(label)
# Init QSystemTrayIcon
self.tray_icon = QSystemTrayIcon(self)
self.tray_icon.setIcon(QIcon(os.getcwd() + '/../images/todo_info.svg'))
# # self.style().standardIcon(QStyle.SP_ComputerIcon))
#
# self.checkbox = QCheckBox('最小化')
# layout.addWidget(self.checkbox)
'''
Define and add steps to work with the system tray icon
show - show window
hide - hide window
exit - exit from application
'''
show_action = QAction("显示", self)
quit_action = QAction("退出", self)
hide_action = QAction("隐藏", self)
show_action.triggered.connect(self.show)
hide_action.triggered.connect(self.hide)
quit_action.triggered.connect(QApplication.instance().quit)
tray_menu = QMenu()
tray_menu.addAction(show_action)
tray_menu.addAction(hide_action)
tray_menu.addAction(quit_action)
self.tray_icon.setContextMenu(tray_menu)
self.tray_icon.show()
# self.exit_widget = QWidget(self)
#
# self.exit_widget.setLayout(layout)
# 关闭窗口时弹出确认消息
def closeEvent(self, event):
# 创建一个消息盒子(提示框)
quitMsgBox = QMessageBox()
quitMsgBox.resize(300, 200)
# 设置提示框的标题
quitMsgBox.setWindowTitle('确认窗口')
# 设置提示框的内容
quitMsgBox.setText('你确定退出吗?')
# 创建两个点击的按钮,修改文本显示内容
buttonY = QPushButton('退出程序')
buttonN = QPushButton('最小化到托盘')
# 将两个按钮加到这个消息盒子中去并指定yes和no的功能
style = """
/*设置堆栈按钮样式*/
QPushButton {
/* padding: 3px 20px;*/
/* text-align:center;*/
background-color:orange;
border-radius:15px;
}
QPushButton:hover {
/* padding: 3px 20px;*/
/* text-align:center;*/
background-color:#dddddd;
border-radius:15px;
}
QPushButton:pressed {
/* padding: 3px 20px;*/
/* text-align:center;*/
background-color:#9f9f9f;
border-radius:15px;
}
"""
buttonY.setStyleSheet(style)
buttonN.setStyleSheet(style)
quitMsgBox.addButton(buttonY, QMessageBox.YesRole)
quitMsgBox.addButton(buttonN, QMessageBox.NoRole)
quitMsgBox.exec_()
# 判断返回值如果点击的是Yes按钮我们就关闭组件和应用否则就忽略关闭事件
if quitMsgBox.clickedButton() == buttonY:
event.accept()
else:
self.hide()
event.ignore()
# if self.checkbox.isChecked():
# event.ignore()
# self.hide()
# if self.check_box.isChecked():
# event.ignore()
# self.hide()
# self.tray_icon.showMessage(
# "Tray Program",
# "Application was minimized to Tray",
# QSystemTrayIcon.Information,
# 2000
# )
if __name__ == '__main__':
app = QApplication(sys.argv)
main = SystemTray()
main.show()
sys.exit(app.exec_())