0

我在主菜单的动画中有一个简单的幻灯片。:

我有一个按钮可以触发这个动画和另一个功能。另一个函数只是在文本框中设置文本并打开一个对话框小部件。问题是当我在启动动画的同时调用其他函数时,动画变得非常有问题/滞后。当我删除对函数的调用时,动画很流畅。作为测试,我还尝试用打印“Clicked”的单个打印语句替换该功能,这足以导致动画滞后。

在下面的代码中,我有两个按钮。一个滑动菜单而不调用任何其他函数的按钮,另一个滑动菜单的按钮调用另一个函数,在本例中为 print。您应该看到第一个按钮产生平滑的动画,而另一个按钮产生滞后的动画。

import sys
from PySide.QtGui import *
from PySide.QtCore import *


class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.central = QFrame()
        self.mainLayout = QVBoxLayout(self.central)
        self.setCentralWidget(self.central)
        self.slide_wo_printing = QPushButton("Slide the menu without printing") #Pushing this button will slide the menu without printing anything. It will be smooth
        self.slide_wo_printing.clicked.connect(self.slideMainMenu)

        self.slide_w_printing = QPushButton("Slide the menu with printing")     #Pushing this button will slide the menu and print something. It will be laggy
        self.slide_w_printing.clicked.connect(lambda: print("Button Clicked"))
        self.slide_w_printing.clicked.connect(self.slideMainMenu)

        self.mainLayout.addWidget(self.slide_wo_printing)
        self.mainLayout.addWidget(self.slide_w_printing)

        self.resize(700,800)

        self.mainMenu = QFrame(self)
        self.mainMenu.setStyleSheet("QFrame{background-color:lightblue;}")
        self.mainMenu.resize(200,700)
        self.mainMenuLayout = QVBoxLayout(self.mainMenu)

        self.first_btn = QPushButton("Button 1")
        self.mainMenuLayout.addWidget(self.first_btn)
        self.second_btn = QPushButton("Button 2")
        self.mainMenuLayout.addWidget(self.second_btn) 
        self.third_btn = QPushButton("Button 3")
        self.mainMenuLayout.addWidget(self.third_btn)
        self.mainMenu.move(QPoint(0,65))
        self.mainMenu.show() 


        self.ani = QPropertyAnimation(
            self.mainMenu, b"geometry", parent=self, duration=200
        )

        self.mainMenuShown = True



    def slideMainMenu(self):
        if(self.mainMenuShown):
            self.ani.setStartValue(QRect(0,65,200,700))
            self.ani.setEndValue(QRect(-200,65,200,700))
            self.ani.start()
        else:
            self.ani.setStartValue(QRect(-200,65,200,700))
            self.ani.setEndValue(QRect(0,65,200,700))
            self.ani.start()

        self.mainMenuShown = not self.mainMenuShown



if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    ret = app.exec_()
    sys.exit( ret )

无论如何我可以解决这个问题吗?按下主菜单按钮应该可以更改页面以及将菜单滑回。看来我不能同时做这两个。

4

0 回答 0