Python 调用setSizes()方法时如何设置拆分器的动画?
在我的Qt5 GUI中有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
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
作为起始值