| 155 | |
| 156 | |
| 157 | class NotificationWindow(QListWidget): |
| 158 | _instance = None |
| 159 | |
| 160 | def __init__(self, *args, **kwargs): |
| 161 | super(NotificationWindow, self).__init__(*args, **kwargs) |
| 162 | self.setSpacing(20) |
| 163 | self.setMinimumWidth(412) |
| 164 | self.setMaximumWidth(412) |
| 165 | QApplication.instance().setQuitOnLastWindowClosed(True) |
| 166 | # 隐藏任务栏,无边框,置顶等 |
| 167 | self.setWindowFlags(self.windowFlags() | Qt.Tool | |
| 168 | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) |
| 169 | # 去掉窗口边框 |
| 170 | self.setFrameShape(self.NoFrame) |
| 171 | # 背景透明 |
| 172 | self.viewport().setAutoFillBackground(False) |
| 173 | self.setAttribute(Qt.WA_TranslucentBackground, True) |
| 174 | # 不显示滚动条 |
| 175 | self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) |
| 176 | self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) |
| 177 | # 获取屏幕高宽 |
| 178 | rect = QApplication.instance().desktop().availableGeometry(self) |
| 179 | self.setMinimumHeight(rect.height()) |
| 180 | self.setMaximumHeight(rect.height()) |
| 181 | self.move(rect.width() - self.minimumWidth() - 18, 0) |
| 182 | |
| 183 | def removeItem(self, item): |
| 184 | # 删除item |
| 185 | w = self.itemWidget(item) |
| 186 | self.removeItemWidget(item) |
| 187 | item = self.takeItem(self.indexFromItem(item).row()) |
| 188 | w.close() |
| 189 | w.deleteLater() |
| 190 | del item |
| 191 | |
| 192 | @classmethod |
| 193 | def _createInstance(cls): |
| 194 | # 创建实例 |
| 195 | if not cls._instance: |
| 196 | cls._instance = NotificationWindow() |
| 197 | cls._instance.show() |
| 198 | NotificationIcon.init() |
| 199 | |
| 200 | @classmethod |
| 201 | def info(cls, title, message, callback=None): |
| 202 | cls._createInstance() |
| 203 | item = QListWidgetItem(cls._instance) |
| 204 | w = NotificationItem(title, message, item, cls._instance, |
| 205 | ntype=NotificationIcon.Info, callback=callback) |
| 206 | w.closed.connect(cls._instance.removeItem) |
| 207 | item.setSizeHint(QSize(cls._instance.width() - |
| 208 | cls._instance.spacing(), w.height())) |
| 209 | cls._instance.setItemWidget(item, w) |
| 210 | |
| 211 | @classmethod |
| 212 | def success(cls, title, message, callback=None): |
| 213 | cls._createInstance() |
| 214 | item = QListWidgetItem(cls._instance) |