2014-04-17 68 views
0

下面的代碼創建一個QPidButton連接到resizeDialog()的單個QWidget窗口。按下按鈕將對話框的大小從.resize(200,100)切換到.resize(600,300)並返回。PyQt:如何爲對話框大小設置動畫效果

問題:默認情況下,從一個窗口的大小過渡到另一個窗口的大小立即發生。如何用動畫覆蓋此行爲?

enter image description here

from PyQt4 import QtCore, QtGui 
import sys 

class myWindow(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(myWindow, self).__init__(parent) 
     myLayout = QtGui.QVBoxLayout(self) 
     Button = QtGui.QPushButton('Resize') 
     myLayout.addWidget(Button) 
     Button.setMinimumWidth(200) 
     Button.clicked.connect(self.resizeDialog) 

    def resizeDialog(self): 
     dialog.size().width()==200: 
      dialog.resize(600,300) 
     else: 
      dialog.resize(200,100) 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    app.setApplicationName('myApp') 
    dialog = myWindow() 
    dialog.resize(200,100) 
    dialog.show() 
    sys.exit(app.exec_()) 
+0

[PyQt4 - Smooth window resize transition?]的可能重複(http://stackoverflow.com/questions/8485746/pyqt4-smooth-window-resize-transition) – M4rtini

+1

您發佈的鏈接可能是重複的沒有一行代碼。從那裏開始的主題超出了動畫主題(重寫paint()等)。這個問題的目的是在對話框大小動畫上得到一個簡單明瞭的答案。當您必須過濾出與所討論主題完全無關的500行文本時,這裏有足夠的資源。讓我們保持簡單。截圖中的一個簡單問題,一個簡單的代碼示例 - 作爲結果的簡單答案。有什麼比這更美麗的?我希望別人會喜歡簡單。 – alphanumeric

回答

3
def resizeDialog(self): 
    self.animation = QtCore.QPropertyAnimation(self, "size") 
    # self.animation.setDuration(1000) #Default 250ms 
    if self.size().width()==200: 
     self.animation.setEndValue(QtCore.QSize(600,300)) 
    else: 
     self.animation.setEndValue(QtCore.QSize(200,100)) 
    self.animation.start() 

source通過this問題聯繫在一起,導致了這種代碼。在這種情況下,從C++代碼轉換爲python是相當直接的。

+0

太棒了!謝謝您的幫助! – alphanumeric

相關問題