Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为提出的QWidget设置QVariantAnimation?_Python_Pyqt_Pyqt5 - Fatal编程技术网

Python 如何为提出的QWidget设置QVariantAnimation?

Python 如何为提出的QWidget设置QVariantAnimation?,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我有这个代码在菜单之间切换 import sys from PyQt5.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint, QRect, QSize, QUrl, Qt) from PyQt5 import QtWidgets from PyQt5 import QtGui from PyQt5 import QtCore from PyQt5.QtCore import QPropertyAnimation,

我有这个代码在菜单之间切换

import sys

from PyQt5.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint,
    QRect, QSize, QUrl, Qt)
from PyQt5 import QtWidgets
from PyQt5 import QtGui
from PyQt5 import QtCore
from PyQt5.QtCore import QPropertyAnimation, QPoint
from PyQt5.QtWidgets import QGraphicsEffect, QApplication, QWidget, QMainWindow, QVBoxLayout, QLabel


'''
from PySide2.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint,
    QRect, QSize, QUrl, Qt)
from PySide2 import QtWidgets
from PySide2 import QtGui
from PySide2 import QtCore
from PySide2.QtCore import QPropertyAnimation, QPoint
from PySide2.QtWidgets import QGraphicsEffect, QApplication, QWidget, QMainWindow, QVBoxLayout, QLabel
'''

class Main(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        center_lay = QtWidgets.QGridLayout(self)
        center_lay.setObjectName(u"center_lay")
        Spacer_1 = QtWidgets.QSpacerItem(17, 105, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        center_lay.addItem(Spacer_1, 0, 1, 1, 1)
        Spacer_2 = QtWidgets.QSpacerItem(327, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        center_lay.addItem(Spacer_2, 1, 0, 1, 1)
        Spacer_3 = QtWidgets.QSpacerItem(326, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        center_lay.addItem(Spacer_3, 1, 2, 1, 1)
        Spacer_4 = QtWidgets.QSpacerItem(20, 105, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        center_lay.addItem(Spacer_4, 2, 1, 1, 1)
        block = QtWidgets.QWidget()
        block.setObjectName(u"block")
        center_lay.addWidget(block, 1, 1, 1, 1)         
        block.setMinimumSize(QSize(300, 300))
        lay_block = QtWidgets.QVBoxLayout(block)
        lay_block.setObjectName(u"lay_block")
        block.setStyleSheet('''background:#000''')
        self.mv_blur_but = QtWidgets.QWidget(block)
        self.mv_blur_but.setObjectName(u"mv_blur_but")
        self.mv_blur_but.setGeometry(QRect(110, 20, 111, 111))  
        self.mv_blur_but.setStyleSheet('''background:#fff''')   
        move_blur_button_lay = QtWidgets.QVBoxLayout(self.mv_blur_but)
        move_blur_button_lay.setObjectName(u"move_blur_button_lay")
        self.mv_rad_arr = []
        self.mv_cont_arr = []   
        for x in range(2):
            radio = QtWidgets.QRadioButton(self.mv_blur_but)
            radio.setObjectName("mv_radio_but-{}".format(x))
            radio.pressed.connect(self.off)
            radio.toggled.connect(self.anim )
            self.mv_rad_arr.append(radio)
            move_blur_button_lay.addWidget(self.mv_rad_arr[x])
            mv_blur_menu = QtWidgets.QWidget(block)
            mv_blur_menu.resize(50, 60)
            mv_blur_menu.move(60 , 20)
            self.mv_cont_arr.append(mv_blur_menu)
            but = self.mv_rad_arr[x]
            menu = self.mv_cont_arr[x]
        self.mv_cont_arr[0].setStyleSheet('''background:#ff0''')
        self.mv_cont_arr[1].setStyleSheet('''background:#f0f''')
        self.radio_1 = QtWidgets.QRadioButton(self.mv_blur_but)
        self.radio_1.setObjectName("mv_radio_but-99")
        self.radio_1.move(-self.radio_1.width(),0)
        self.mv_rad_arr.append(self.radio_1)
        self.group = QtCore.QSequentialAnimationGroup(self) 
        self.num = 0
        self.menu_group_ani = []
    def anim (self):
        self.animation= []
        for i in range(2):
            menuAnimation = QtCore.QVariantAnimation() #Fun Animation
            menuAnimation.setDuration(500) #Time
            menuAnimation.setEasingCurve(QtCore.QEasingCurve.OutQuart)
            menuAnimation.setStartValue(QPoint(-20, 10))
            menuAnimation.setEndValue(QPoint(0, 10))
            self.animation.append(menuAnimation)
        self.num =self.num+1
        old = int(self.sender().objectName().split('-')[1])
        self.menu_group_ani.append(old)
        print(self.menu_group_ani)
        ff_id = 0
        for id in sorted(self.menu_group_ani):
            pos1 = QPoint(60 , 20)
            pos2 = QPoint(221, 20)
            self.animation[ff_id].setStartValue(pos1)
            self.animation[ff_id].setEndValue(pos2)
            self.animation[ff_id].valueChanged.connect(lambda value, val=self.menu_group_ani[ff_id]: self.chengeval(value, val))
            self.mv_cont_arr[self.menu_group_ani[0]].raise_()
            self.mv_blur_but.raise_()
            if self.mv_cont_arr[self.menu_group_ani[ff_id]].pos() == pos2:
                self.animation[ff_id].setDirection(QtCore.QAbstractAnimation.Backward)
            else :
                self.animation[ff_id].setDirection(QtCore.QAbstractAnimation.Forward)
            ff_id +=1
        try: 
            self.animation[0].finished.connect(self.animation[1].start)
        except IndexError:
            print('Err')
        if (self.num == 1) or (self.num == 3):
            self.menu_group_ani.clear()
            self.animation[0].start()
        if self.num == 3 :
            self.num = 1    
    def off(self):
        check_1 = self.sender().isChecked()
        if check_1 == True:
            print('check')
            self.radio_1.setChecked(True)    #Unchecked/Checked
            self.menu_group_ani.clear()
        else:
            print('uncheked')
    def chengeval(self,value,val=''):
        self.mv_cont_arr[val].move(value.x(), value.y())
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    win = Main()
    win.resize(640, 570)  
    win.show()
    sys.exit(app.exec_())

一切都很好,直到我把它关掉(自我) 为什么代码如此不稳定

问题

我需要

我尝试使用clear()或if来处理self.menu\u group\u ani 但无论我做什么,代码都不能正常工作 单击。连接也未给出所需的结果
如何修复?

1)在代码生成错误时验证代码。2) 消除不必要的导入,例如从PyQt5.QtQml导入QQmlApplicationEngine的
,因为它们会分散注意力。3) 不仅要放置图像,还要解释错误所在。4) 这段代码的具体目的是什么?@eyllanesc错误是在函数off()期间,radio没有切换到self.radio_1,这就是为什么当我从self.mv_rad_arr[0]切换到self.mv_rad_arr[1]时会发生错误。必须在运行前清除self.menu\u group\u ani,或强制关闭()开关至self.radio\u 1。