Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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 调用setSizes()方法时如何设置拆分器的动画?_Python_Pyqt5_Qsplitter - Fatal编程技术网

Python 调用setSizes()方法时如何设置拆分器的动画?

Python 调用setSizes()方法时如何设置拆分器的动画?,python,pyqt5,qsplitter,Python,Pyqt5,Qsplitter,在我的Qt5 GUI中有QSplitter小部件,并且有两个子小部件添加到该拆分器中。还有一个QPushButton小部件,当按下该按钮时,第二个子部件消失,当再次按下该按钮时,子部件出现。但是我想要像那样扩展和折叠那个小部件。但我不知道如何在splitter小部件上调用“setSizes()”时设置事件的动画 有人能给我pyqt5中的代码吗 这是我的密码 from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(QtWid

在我的Qt5 GUI中有
QSplitter
小部件,并且有两个子小部件添加到该拆分器中。还有一个
QPushButton
小部件,当按下该按钮时,第二个子部件消失,当再次按下该按钮时,子部件出现。但是我想要像那样扩展和折叠那个小部件。但我不知道如何在splitter小部件上调用“setSizes()”时设置事件的动画

有人能给我pyqt5中的代码吗

这是我的密码

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(QtWidgets.QMainWindow):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(400, 300)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralWidget)
        self.verticalLayout.setContentsMargins(11, 11, 11, 11)
        self.verticalLayout.setSpacing(6)
        self.verticalLayout.setObjectName("verticalLayout")

        self.pushButton = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.splitter_resize)
        self.pushButton.setCheckable(True)

        self.verticalLayout.addWidget(self.pushButton)

        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setSpacing(6)
        self.horizontalLayout.setObjectName("horizontalLayout")

        self.pushButton_2 = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_2.setObjectName("pushButton_2")

        self.pushButton_3 = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_3.setObjectName("pushButton_3")

        self.splitter = QtWidgets.QSplitter()
        self.splitter.setOrientation(QtCore.Qt.Horizontal)
        self.splitter.addWidget(self.pushButton_2)
        self.splitter.addWidget(self.pushButton_3)

        self.horizontalLayout.addWidget(self.splitter)

        self.verticalLayout.addLayout(self.horizontalLayout)
        MainWindow.setCentralWidget(self.centralWidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def splitter_resize(self):
        if self.pushButton.isChecked():
            self.splitter.setSizes([16777215, 0])
            self.pushButton.setChecked = False
        else:
            self.splitter.setSizes([16777215, 16777215])
            self.pushButton.setChecked = True

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_2.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_3.setText(_translate("MainWindow", "PushButton"))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

您可以使用QVariantAnimation:

从PyQt5导入QtCore、QtGui、qtwidget
最小尺寸,最大尺寸=0,16777215
类MainWindow(QtWidgets.QMainWindow):
def uuu init uuu(self,parent=None):
超级(主窗口,自我)。\uuuuu初始化\uuuuuuu(父级)
button=QtWidgets.QPushButton(
“按我”,可检查=真,切换=自切换
)
left_button=qtwidts.QPushButton(“左”)
右按钮=qtwidts.QPushButton(“右”)
sp=右按钮。sizePolicy()
sp.setHorizontalPolicy(QtWidgets.QSizePolicy.Ignored)
右按钮设置策略(sp)
self.m_splitter=qtwidts.QSplitter(方向=QtCore.Qt.Horizontal)
self.m_splitter.addWidget(左按钮)
self.m_splitter.addWidget(右键)
widget=qtwidts.QWidget()
self.setCentralWidget(小部件)
lay=qtwidts.QVBoxLayout(小部件)
lay.addWidget(按钮)
lay.addWidget(self.m_splitter)
self.m_动画=QtCore.QVariantAnimation(
自己
起始值=最大尺寸,
endValue=最小尺寸,
valueChanged=self.onValueChanged,
持续时间=1000,
easingCurve=QtCore.QEasingCurve.InOutCubic,
)
@QtCore.pyqtlot(bool)
def ONTOGGED(自检,已检查):
self.m_animation.setDirection(
QtCore.QAbstractAnimation.Forward
如果检查
else QtCore.QAbstractAnimation.Backward
)
self.m_animation.start()
@pyqtSlot(QtCore.QVariant)
def onValueChanged(自身,值):
s=[最大大小,值]
self.m_拆分器设置大小
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
w=主窗口()
w、 调整大小(640480)
w、 show()
sys.exit(app.exec_())

您可以使用QVariantAnimation:

从PyQt5导入QtCore、QtGui、qtwidget
最小尺寸,最大尺寸=0,16777215
类MainWindow(QtWidgets.QMainWindow):
def uuu init uuu(self,parent=None):
超级(主窗口,自我)。\uuuuu初始化\uuuuuuu(父级)
button=QtWidgets.QPushButton(
“按我”,可检查=真,切换=自切换
)
left_button=qtwidts.QPushButton(“左”)
右按钮=qtwidts.QPushButton(“右”)
sp=右按钮。sizePolicy()
sp.setHorizontalPolicy(QtWidgets.QSizePolicy.Ignored)
右按钮设置策略(sp)
self.m_splitter=qtwidts.QSplitter(方向=QtCore.Qt.Horizontal)
self.m_splitter.addWidget(左按钮)
self.m_splitter.addWidget(右键)
widget=qtwidts.QWidget()
self.setCentralWidget(小部件)
lay=qtwidts.QVBoxLayout(小部件)
lay.addWidget(按钮)
lay.addWidget(self.m_splitter)
self.m_动画=QtCore.QVariantAnimation(
自己
起始值=最大尺寸,
endValue=最小尺寸,
valueChanged=self.onValueChanged,
持续时间=1000,
easingCurve=QtCore.QEasingCurve.InOutCubic,
)
@QtCore.pyqtlot(bool)
def ONTOGGED(自检,已检查):
self.m_animation.setDirection(
QtCore.QAbstractAnimation.Forward
如果检查
else QtCore.QAbstractAnimation.Backward
)
self.m_animation.start()
@pyqtSlot(QtCore.QVariant)
def onValueChanged(自身,值):
s=[最大大小,值]
self.m_拆分器设置大小
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
w=主窗口()
w、 调整大小(640480)
w、 show()
sys.exit(app.exec_())

非常感谢。这对我帮助很大。今天我学到了一个新东西。在这个动画中,折叠总是从拆分器的中间开始,即使子窗口小部件的分区不相等,即拆分器处理程序不在中间。如何解决??我使用了
right_button.width()
作为一个单独动画的开始值,使用了
0
作为结束值,但它不起作用,显然,我已经删除了
Forward
animation@AnkitKumarVerma在您的视图中,按钮具有相同的权重,此外,当您按下按钮时,动画从中心向右开始,如果你按下按钮,从右到中开始。如果你有另一个配置,那么你的MRE是不正确的,所以改进它,然后我将为你提供一个适当的解决方案,向前和向后用于指示方向,如果你像你所做的那样移除它,那么只有从同一点开始的塌陷或膨胀,所以不要消除它。实际上,我删除了
转发
动画,因为我已经像上面所说的那样单独添加了它。@AnkitKumarVerma如果你修改我的代码,我的解决方案将不起作用,如果你有其他要求,我请你创建一个新问题,提供MRE并明确指出新的要求,所以社区会很乐意帮助你。请阅读,非常感谢。这对我帮助很大。今天我学到了一个新东西。在这个动画中,折叠总是从拆分器的中间开始,即使子窗口小部件的分区不相等,即拆分器处理程序不在中间。如何解决??我使用了
right\u button.width()
作为起始值,使用
0
作为起始值