PyQt自定义环绕控件

37 篇文章 1 订阅
# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets as  QtGui
from PyQt5 import QtCore
from PyQt5.QtGui import *
import glob
import random
import numpy as np

speed = 400

class circle_label(QtGui.QLabel):
    def __init__(self,parent=None):
        QtGui.QLabel.__init__(self, parent)
        self._parent =  parent

        self.time_num=0
   
        
        self.setWindowTitle("Tray!")
        self.setAcceptDrops(True)
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground);
        self.setWindowOpacity(1)
        self._time=QtCore.QTimer()
        self._time.start(10)  
        self.pic=QPixmap('circle.png')
        self.setPixmap(self.pic)
        self.setMask(self.pic.mask())
        self.setAlignment(QtCore.Qt.AlignCenter)
        self._time.timeout.connect(self.change_position)

    def mousePressEvent(self,event):
        if event.button()==QtCore.Qt.LeftButton:
            self.dragPosition=event.globalPos()-self.frameGeometry().topLeft()
            event.accept()
        if event.button()==QtCore.Qt.RightButton:
            pass
    def mouseMoveEvent(self,event):
        if event.buttons()& QtCore.Qt.LeftButton:
            self.move(event.globalPos()-self.dragPosition)
            event.accept()
    def change_position(self):
        r = self._parent.height()/1.2
        a =  (self._parent.pos().x()+ self._parent.width()/2)
        b =  (self._parent.pos().y() +self._parent.height()/2.5)

        pos_data= ((speed-self.time_num)/speed)*2*np.pi
        self.time_num+=1

        if self.time_num>=speed:
            self.time_num=0
        
        x = a + r * np.cos(pos_data)
        y = b + r * np.sin(pos_data)
        self.move(x,y)

class circle_label1(QtGui.QLabel):
    def __init__(self,parent=None):
        QtGui.QLabel.__init__(self, parent)
        self._parent =  parent

        self.time_num=0
   
        
        self.setWindowTitle("Tray!")
        self.setAcceptDrops(True)
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground);
        self.setWindowOpacity(1)
        self._time=QtCore.QTimer()
        self._time.start(10)  
        self.pic=QPixmap('circle.png')
        self.setPixmap(self.pic)
        self.setMask(self.pic.mask())
        self.setAlignment(QtCore.Qt.AlignCenter)
        self._time.timeout.connect(self.change_position)

    def mousePressEvent(self,event):
        if event.button()==QtCore.Qt.LeftButton:
            self.dragPosition=event.globalPos()-self.frameGeometry().topLeft()
            event.accept()
        if event.button()==QtCore.Qt.RightButton:
            pass
    def mouseMoveEvent(self,event):
        if event.buttons()& QtCore.Qt.LeftButton:
            self.move(event.globalPos()-self.dragPosition)
            event.accept()
    def change_position(self):
        r = self._parent.height()/1.5
        a =  (self._parent.pos().x()+ self._parent.width()/2)
        b =  (self._parent.pos().y() +self._parent.height()/2.5)
    
        pos_data= (self.time_num/speed)*2*np.pi
        self.time_num+=1

        if self.time_num>=speed:
            self.time_num=0
        
        x = a + r * np.cos(pos_data)
        y = b + r * np.sin(pos_data)
        self.move(x,y)

        
class Tray_(QtGui.QLabel):
    def __init__(self, parent=None):
        QtGui.QLabel.__init__(self, parent)
        self.contorl=1
        self.app=None

        self.setWindowTitle("Tray!")
        self.setAcceptDrops(True)
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground);
        self.setWindowOpacity(1)
        self._time=QtCore.QTimer()
        
        self._image=QtGui.QLabel()
        self._pic=QPixmap('pic1.png')
        self._image.setPixmap(self._pic)
        self._image.setMask(self._pic.mask())
        
        self.layout = QtGui.QVBoxLayout()
        self.layout.addWidget(self._image)
        self.setLayout(self.layout)  
        
        self._image.setScaledContents(True)        
        self._image.setAlignment(QtCore.Qt.AlignCenter)


        self._time.start(60000)
        self.resize(100,100)
        self.show()
    def mousePressEvent(self,event):
        if event.button()==QtCore.Qt.LeftButton:
            self.dragPosition=event.globalPos()-self.frameGeometry().topLeft()
            event.accept()
        if event.button()==QtCore.Qt.RightButton:
            pass
    def mouseMoveEvent(self,event):
        if event.buttons()& QtCore.Qt.LeftButton:
            self.move(event.globalPos()-self.dragPosition)
            event.accept()
    def mouseDoubleClickEvent(self, event):
        if event.buttons () == QtCore.Qt.LeftButton:
            if self.contorl==1:
                self.contorl=0
                self.app = circle_label(self)
                self.app1 = circle_label1(self)
                self.app.show()
                self.app1.show()
            else:
                self.contorl=1
                if self.app!=None:
                    self.app.close()
                    self.app1.close()
        
if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    dialog = Tray_()
    dialog.show()
    sys.exit(app.exec_())

在这里插入图片描述
说明:双击鼠标左键,显示控件。

图片:pic1
在这里插入图片描述
图片:circle(白色的圆,看不到)
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佐倉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值