2016-08-25 4 views
2

私はPyQt5を使用してグラフィカル・インタフェースを使用してプログラムを実行しています。私がしたいのは、ユーザーが特定のボタンを押すと、このウィジェットが変更され、他のオプションが表示されることです。"QStackedWidget.setCurrentIndex":動作しないか、エラー・マーク

私はQStackedWidgetを使用することに決めました。私のすべてのインターフェイスはQT5デザイナーからビルドしました。

しかし、私のコードでは、QStackedWidget.setCurrentIndexメソッドを使用して、私の名前付きボタン "btfr"が私のstackedWidgetの "page_2"を表示していることを確認したい場合は、何もしません。次のように

コードは次のとおりです。

import sys 
from PyQt5 import uic 
from PyQt5.QtCore import QTimeLine 
from PyQt5.QtWidgets import * 
from PyQt5.QtGui import * 

infz = uic.loadUiType("main.ui")[0] 


class FaderWidget(QWidget): 

    def __init__(self, old_widget, new_widget): 

     QWidget.__init__(self, new_widget) 

     self.old_pixmap = QPixmap(new_widget.size()) 
     old_widget.render(self.old_pixmap) 
     self.pixmap_opacity = 1.0 
     self.timeline = QTimeLine() 
     self.timeline.valueChanged.connect(self.animate) 
     self.timeline.finished.connect(self.close) 
     self.timeline.setDuration(333) 
     self.timeline.start() 
     self.resize(new_widget.size()) 
     self.show() 

    def paintEvent(self, event): 

     painter = QPainter() 
     painter.begin(self) 
     painter.setOpacity(self.pixmap_opacity) 
     painter.drawPixmap(0, 0, self.old_pixmap) 
     painter.end() 

    def animate(self, value): 

     self.pixmap_opacity = 1.0 - value 
     self.repaint() 

class StackedWidget(QStackedWidget): 

    def __init__(self, parent=None): 
     QStackedWidget.__init__(self, parent) 

    def setCurrentIndex(self, index): 
     self.stack = MyWindowClass() 
     self.a = self.stack.stackedWidget.currentWidget() 
     self.b = self.stack.stackedWidget.widget(index) 
     self.fader_widget = FaderWidget(self.a, self.b) 
     QStackedWidget.setCurrentIndex(self, index) 
     print(self, index) 

    def setPage1(self): 
     self.setCurrentIndex(0) 

    def setPage2(self): 
     self.setCurrentIndex(1) 


class MyWindowClass(QStackedWidget, infz): 
    def __init__(self, parent=None): 
     global pos, c, f 
     self.pos = 0 
     self.c = [] 
     self.f = False 
     QStackedWidget.__init__(self, parent) 
     self.setupUi(self) 
     self.setWindowTitle('SkR') 

if __name__ == "__main__": 

    app = QApplication(sys.argv) 

    window = MyWindowClass() 
    window.resize(788, 518) 
    stack = StackedWidget() 
    window.btfr.clicked.connect(stack.setPage2) 
    window.btnpx.clicked.connect(stack.setPage1) 
    window.show() 

    sys.exit(app.exec_()) 

私はこのコードでいき何ウィジェットの変更が影響してそうしていることである:「フェードアウト」。私は「自己」と「インデックス」を印刷する場合

はQStackedWidget.setCurrentIndexを受信すると、次のことを示しています

<__main__.StackedWidget object at 0x7fc2eb6b5c18> 0 

数ゼロは指数であり、他の要素が

をいただき、ありがとうございます自己

ですあなたの注意、私は誰かが助けることを願っています。

答えて

0

あなたの質問は完全に明確ではないが、あなただけしたくない:あなたはsetCurrentIndexメソッドに直接ボタンにリンクすることができすべきとlambdaを使用するよう

def setIndex(self, index): 
    self.setCurrentIndex(index) 

はしかし、これは少し冗長ですインデックス値を渡す:

btfr.clicked.connect(lambda: self.setCurrentIndex(2)) 
+0

私の質問には多少不完全であることを申し訳ありませんが、私はあなたを助けてくれることを願っています。どうもありがとうございます。 –

関連する問題