from PyQt5.QtCore import Qt, QPropertyAnimation, QRect, QEasingCurve, QTimer, pyqtSignal
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QGraphicsOpacityEffect
import sys
from CloudMusic.WinSetting import winSetting
class myLabel(QLabel):
cur_Index = 0
class Test_Window(QWidget, winSetting):
# 自定义信号
label_clicked_signal = pyqtSignal(object)
def mousePressEvent(self, e):
print("鼠标点击")
self.label_clicked_signal.emit()
def leaveEvent(self, e):
self.right_btn.setVisible(False)
self.left_btn.setVisible(False)
def enterEvent(self, e):
self.right_btn.setVisible(True)
self.left_btn.setVisible(True)
def __init__(self):
super(Test_Window, self).__init__()
self.resize(1110, 300)
self.setWindowFlag(Qt.FramelessWindowHint)
self.label_pos_size_0 = (220, 25, 670, 250)
self.label_pos_size_1 = (690, 50, 400, 200)
self.label_pos_size_2 = (20, 50, 400, 200)
self.init_swiper()
self.loop_init_label()
self.timer = QTimer()
self.timer.start(10000) # 定时每五秒执行一次函数init_to_left_animation
self.timer.timeout.connect(lambda: self.init_to_right_or_left_animation("left"))
def init_swiper(self):
self.left_btn = QPushButton(self)
self.left_btn.setGeometry(20, 130, 40, 40)
self.left_btn.clicked.connect(lambda: self.init_to_right_or_left_animation("left"))
self.right_btn = QPushButton(self)
self.right_btn.setGeometry(1050, 130, 40, 40)
self.right_btn.clicked.connect(lambda: self.init_to_right_or_left_animation("right"))
# 设置按钮不可见
self.left_btn.setVisible(False)
self.right_btn.setVisible(False)
# 设置按钮控件透明
right_op = QGraphicsOpacityEffect()
right_op.setOpacity(0.1)
self.left_btn.setGraphicsEffect(right_op)
# self.left_btn.setAutoFillBackground(True)
left_op = QGraphicsOpacityEffect()
left_op.setOpacity(0.1)
self.right_btn.setGraphicsEffect(left_op)
# self.right_btn.setAutoFillBackground(True)
def loop_init_label(self):
name = []
for i in range(0, 3):
label = 'label' + str(i)
name.append(label)
for i in range(0, len(name)):
self.name = name
self.name[i] = myLabel(self)
self.name[i].cur_Index = i
if i == 0:
print(self.label_pos_size_0)
# 换成图片即可
self.name[i].setStyleSheet("QLabel{background:rgb(0,0,255);}")
self.name[i].setGeometry(
QRect(self.label_pos_size_0[0], self.label_pos_size_0[1], self.label_pos_size_0[2],
self.label_pos_size_0[3]))
continue
if i == 1:
self.name[i].setStyleSheet("QLabel{background:rgb(0,255,0);}")
self.name[i].setGeometry(
QRect(self.label_pos_size_1[0], self.label_pos_size_1[1], self.label_pos_size_1[2],
self.label_pos_size_1[3]))
continue
if i == 2:
self.name[i].setStyleSheet("QLabel{background:rgb(255,0,0);}")
self.name[i].setGeometry(
QRect(self.label_pos_size_2[0], self.label_pos_size_2[1], self.label_pos_size_2[2],
self.label_pos_size_2[3]))
continue
print(self.name[i], self.name[i].cur_Index)
self.name = name
self.name[0].raise_() # 设置控件在最上层
self.left_btn.raise_()
self.right_btn.raise_()
print('标签初始化完毕')
def init_to_right_or_left_animation(self, signal):
label_index_list_1 = [1, 0]
label_pos_size_list_1 = [self.label_pos_size_1, self.label_pos_size_0]
label_index_list_2 = [0, 2]
label_pos_size_list_2 = [self.label_pos_size_0, self.label_pos_size_2]
label_index_list_3 = [2, 1]
label_pos_size_list_3 = [self.label_pos_size_2, self.label_pos_size_1]
# 图片向左移动
if signal == "right":
label_index_list_1 = [0, 1]
label_pos_size_list_1 = [self.label_pos_size_0, self.label_pos_size_1]
label_index_list_2 = [1, 2]
label_pos_size_list_2 = [self.label_pos_size_1, self.label_pos_size_2]
label_index_list_3 = [2, 0]
label_pos_size_list_3 = [self.label_pos_size_2, self.label_pos_size_0]
# 图片向右移动
label_info_list_1 = [label_index_list_1, label_pos_size_list_1]
label_info_list_2 = [label_index_list_2, label_pos_size_list_2]
label_info_list_3 = [label_index_list_3, label_pos_size_list_3]
self.init_to_animation(label_info_list_1, label_info_list_2, label_info_list_3)
def init_to_animation(self, label_info1, label_info2, label_info3):
label_index_1 = label_info1[0]
label_pos_size_1 = label_info1[1]
label_index_2 = label_info2[0]
label_pos_size_2 = label_info2[1]
label_index_3 = label_info3[0]
label_pos_size_3 = label_info3[1]
for i in range(0, len(self.name)):
print(self.name[i].cur_Index)
print("label_index:", label_index_1)
if self.name[i].cur_Index == label_index_1[0]:
print('将索引为1的标签置中')
# self.name[i].setGeometry(450, 150, 300, 300)
self.anim1 = QPropertyAnimation(self.name[i], b'geometry')
self.anim1.setDuration(300)
self.anim1.setStartValue(QRect(label_pos_size_1[0][0],
label_pos_size_1[0][1],
label_pos_size_1[0][2],
label_pos_size_1[0][3]))
self.anim1.setEndValue(QRect(label_pos_size_1[1][0],
label_pos_size_1[1][1],
label_pos_size_1[1][2],
label_pos_size_1[1][3]))
self.anim1.start()
self.name[i].cur_Index = label_index_1[1]
self.name[i].raise_()
self.left_btn.raise_()
self.right_btn.raise_()
continue
if self.name[i].cur_Index == label_index_2[0]:
print('将索引为0的标签置左')
self.anim0 = QPropertyAnimation(self.name[i], b'geometry')
self.anim0.setDuration(300)
self.anim0.setStartValue(QRect(label_pos_size_2[0][0],
label_pos_size_2[0][1],
label_pos_size_2[0][2],
label_pos_size_2[0][3]))
self.anim0.setEndValue(QRect(label_pos_size_2[1][0],
label_pos_size_2[1][1],
label_pos_size_2[1][2],
label_pos_size_2[1][3]))
self.anim0.start()
self.name[i].cur_Index = label_index_2[1]
continue
if self.name[i].cur_Index == label_index_3[0]:
print('将索引为2的标签置右')
self.anim2 = QPropertyAnimation(self.name[i], b'geometry')
self.anim2.setDuration(300)
self.anim2.setStartValue(QRect(label_pos_size_3[0][0],
label_pos_size_3[0][1],
label_pos_size_3[0][2],
label_pos_size_3[0][3]))
self.anim2.setEndValue(QRect(label_pos_size_3[1][0],
label_pos_size_3[1][1],
label_pos_size_3[1][2],
label_pos_size_3[1][3]))
self.anim2.start()
self.name[i].cur_Index = label_index_3[1]
continue
print("动画完毕")
if __name__ == '__main__':
app = QApplication(sys.argv)
win = Test_Window()
win.show()
sys.exit(app.exec_())
PyQt5图片轮播效果
最新推荐文章于 2023-04-20 09:51:23 发布