81 lines
2.8 KiB
Python
81 lines
2.8 KiB
Python
import os
|
|
import sys
|
|
import argparse
|
|
from PyQt5.QtCore import Qt, QTimer
|
|
from PyQt5.QtGui import QPixmap
|
|
from PyQt5.QtWidgets import QMainWindow, QApplication, QLabel
|
|
|
|
class MobbingNotification(QMainWindow):
|
|
def __init__(self, vx=15, vy=-30, gravity=1, t_increment=0.8):
|
|
super().__init__()
|
|
|
|
self.setAttribute(Qt.WA_TranslucentBackground, True)
|
|
self.setAttribute(Qt.WA_NoSystemBackground, True)
|
|
self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.Tool)
|
|
|
|
self.label = QLabel(self)
|
|
pixmap = QPixmap(resource_path('image.png'))
|
|
pixmap = pixmap.scaled(pixmap.width() // 2, pixmap.height() // 2)
|
|
self.label.setPixmap(pixmap)
|
|
self.label.setGeometry(0, 0, pixmap.width(), pixmap.height())
|
|
|
|
self.resize(pixmap.width(), pixmap.height())
|
|
|
|
# Initial position: below the screen
|
|
screen = QApplication.primaryScreen().geometry()
|
|
self.screen_height = screen.height()
|
|
self.screen_width = screen.width()
|
|
self.start_x = self.screen_width - 200
|
|
self.start_y = self.screen_height + 100
|
|
self.move(self.start_x, self.start_y)
|
|
|
|
# Animation parameters
|
|
self.t = 0
|
|
self.t_increment = t_increment
|
|
self.vx = vx
|
|
self.vy = vy
|
|
self.gravity = gravity
|
|
self.has_peaked = False
|
|
|
|
self.timer = QTimer()
|
|
self.timer.timeout.connect(self.animate)
|
|
self.timer.start(16)
|
|
|
|
def animate(self):
|
|
self.t += self.t_increment
|
|
x = self.start_x - self.vx * self.t
|
|
y = self.start_y + self.vy * self.t + 0.5 * self.gravity * self.t ** 2
|
|
|
|
self.move(int(x), int(y))
|
|
|
|
if not self.has_peaked and self.vy + self.gravity * self.t > 0:
|
|
self.has_peaked = True
|
|
|
|
if self.has_peaked and y > self.screen_height:
|
|
QApplication.quit()
|
|
|
|
def resource_path(relative_path):
|
|
try:
|
|
base_path = sys._MEIPASS
|
|
except Exception:
|
|
base_path = os.path.abspath(".")
|
|
|
|
return os.path.join(base_path, relative_path)
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="Animated window jumping into the screen.")
|
|
parser.add_argument('--vx', type=float, default=15, help='Horizontal speed')
|
|
parser.add_argument('--vy', type=float, default=-30, help='Initial vertical speed')
|
|
parser.add_argument('--gravity', type=float, default=1, help='Gravity acceleration')
|
|
parser.add_argument('--t_increment', type=float, default=0.8, help='Time increment per frame')
|
|
|
|
args = parser.parse_args()
|
|
|
|
app = QApplication(sys.argv)
|
|
window = MobbingNotification(vx=args.vx, vy=args.vy, gravity=args.gravity, t_increment=args.t_increment)
|
|
window.show()
|
|
sys.exit(app.exec_())
|
|
|
|
if __name__ == '__main__':
|
|
main()
|