请帮我用pyqt6写一个信息弹窗的代码 窗口出现在主屏幕的右下角并且 窗口要在5秒后自动消失,并且如果检测到多条数据,窗口要向上累积
时间: 2023-11-27 12:51:50 浏览: 34
好的,这里是一个简单的示例代码,用于在屏幕右下角显示信息弹窗:
```python
from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
from PyQt6.QtCore import QTimer, Qt, QPropertyAnimation
class InfoPopup(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
# 设置窗口样式
self.setStyleSheet("background-color:#2C3E50; color:#FFFFFF; font-size:20px;")
self.setWindowFlags(Qt.FramelessWindowHint | Qt.Tool | Qt.WindowStaysOnTopHint)
# 创建标签控件
self.label = QLabel(self)
self.label.setAlignment(Qt.AlignCenter)
self.label.setWordWrap(True)
# 创建垂直布局
layout = QVBoxLayout(self)
layout.addWidget(self.label)
layout.setContentsMargins(20, 20, 20, 20)
self.setLayout(layout)
# 设置定时器
self.timer = QTimer(self)
self.timer.setInterval(5000) # 5秒后自动关闭
self.timer.timeout.connect(self.close)
# 设置动画
self.animation = QPropertyAnimation(self, b"geometry")
self.animation.setDuration(500)
self.animation.setStartValue(self.geometry())
def setText(self, text):
self.label.setText(text)
def show(self):
# 将窗口显示在屏幕右下角
desktop = QApplication.desktop()
rect = desktop.availableGeometry(desktop.primaryScreen())
self.setGeometry(rect.right() - self.width() - 20, rect.bottom() - self.height() - 20, self.width(), self.height())
super().show()
# 启动定时器和动画
self.timer.start()
self.animation.setEndValue(self.geometry().translated(0, -self.height()))
self.animation.start()
```
这里我们创建了一个名为 `InfoPopup` 的窗口类,它继承自 `QWidget` 类。在 `__init__` 方法中,我们设置了窗口的样式,创建了一个标签控件,将其添加到垂直布局中,并设置了定时器和动画。
`setText` 方法用于设置标签控件的文本内容。`show` 方法用于将窗口显示在屏幕右下角,并启动定时器和动画。
使用时,可以在需要显示信息弹窗的地方创建一个 `InfoPopup` 对象,并调用它的 `setText` 方法设置文本内容,最后调用 `show` 方法显示窗口即可。例如:
```python
app = QApplication([])
popup = InfoPopup()
popup.setText("Hello, World!")
popup.show()
app.exec()
```
如果需要在多条数据出现时向上累积,可以将窗口的 y 坐标逐步减小,实现类似滚动效果。你可以在 `show` 方法中修改动画的结束位置,使其逐个向上移动,例如:
```python
def show(self):
# 将窗口显示在屏幕右下角
desktop = QApplication.desktop()
rect = desktop.availableGeometry(desktop.primaryScreen())
self.setGeometry(rect.right() - self.width() - 20, rect.bottom() - self.height() - 20, self.width(), self.height())
super().show()
# 启动定时器和动画
self.timer.start()
self.animation.setEndValue(self.geometry().translated(0, -self.height() * self.count))
self.animation.start()
# 累加窗口数量,以便下一个窗口向上移动
self.count += 1
```
这里我们新增了一个实例变量 `count`,用于记录窗口数量。在每次调用 `show` 方法时,我们将动画的结束位置向上移动 `self.height() * self.count` 个像素,并累加 `count` 的值。这样,每打开一个新窗口,都会向上累积显示。