2016-12-20 12 views
1

でウィジェットを切り替えるためにはどうすれば親オブジェクト内の2つの異なるページ(それぞれPage1をPAGE2、)(objectNameに上に配置された2つのボタン( & wgtbtnB wgtbtnA)を持っています)。私のジレンマはこれです:コードを実行すると、矢印がPyQtに表示されません。どうして?ページ1とページ2を交互に切り替えるにはどうすればよいですか?PyQtは:<em>stackedWidget</em>:QStackedWidget

btnwgtB

のQtデザイナー:

btnwgtA

私はそれらの小さな背中の矢印を維持したいと思います。ここ

は私が求めています何を伝えるのランタイムの画像であり、 。あなたがウィジェットを切り替えるには、あなたのControlMainWindowクラスにはロジックを持たない

# -*- coding: utf-8 -*- 

# Form implementation generated from reading ui file 'stackedWidget.ui' 
# 
# Created by: PyQt4 UI code generator 4.11.4 
# 
# WARNING! All changes made in this file will be lost! 

from PyQt4 import QtCore, QtGui 
import sys 
import os 


try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(512, 304) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     self.stackedWidget = QtGui.QStackedWidget(self.centralwidget) 
     self.stackedWidget.setGeometry(QtCore.QRect(150, 60, 161, 121)) 
     self.stackedWidget.setObjectName(_fromUtf8("stackedWidget")) 
     self.page = QtGui.QWidget() 
     self.page.setObjectName(_fromUtf8("page")) 
     self.wgtMainWindow = QtGui.QPushButton(self.page) 
     self.wgtMainWindow.setGeometry(QtCore.QRect(50, 50, 75, 23)) 
     self.wgtMainWindow.setObjectName(_fromUtf8("wgtMainWindow")) 
     self.stackedWidget.addWidget(self.page) 
     self.page_2 = QtGui.QWidget() 
     self.page_2.setObjectName(_fromUtf8("page_2")) 
     self.wgtbtnB = QtGui.QPushButton(self.page_2) 
     self.wgtbtnB.setGeometry(QtCore.QRect(50, 50, 75, 23)) 
     self.wgtbtnB.setObjectName(_fromUtf8("wgtbtnB")) 
     self.stackedWidget.addWidget(self.page_2) 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.menubar = QtGui.QMenuBar(MainWindow) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 512, 21)) 
     self.menubar.setObjectName(_fromUtf8("menubar")) 
     MainWindow.setMenuBar(self.menubar) 
     self.statusbar = QtGui.QStatusBar(MainWindow) 
     self.statusbar.setObjectName(_fromUtf8("statusbar")) 
     MainWindow.setStatusBar(self.statusbar) 

     self.retranslateUi(MainWindow) 
     self.stackedWidget.setCurrentIndex(1) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) 
     self.wgtMainWindow.setText(_translate("MainWindow", "Widget A", None)) 
     self.wgtbtnB.setText(_translate("MainWindow", "Widget B", None)) 


class ControlMainWindow(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(ControlMainWindow, self).__init__(parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    mySW = ControlMainWindow() 
    mySW.show() 
    sys.exit(app.exec_()) 

答えて

0

以下は私のコードです。あなたがデザイナーに表示

yourQTbutton.itemClicked.connect(self.functioWithUIchangingLogic) 
+0

申し訳ありません。私はより具体的にすべきだった。私は信号とスロットを接続する方法を知っています。私の問題は、pyqtの自動フォーマットされた矢印がどこに行くのかです。通常、stackedWidgetsの右上隅には黒い矢印が2つあります。 –

+0

QTデザイナーを使用してUIを作成していますか?そうであれば、デザイナーに表示されている2つの矢印はアプリケーションに継承されず、デザイナーの機能によって簡単に切り替えることができます – ECM

+0

入手しました。したがって、それらをプログラムで実行する方法はありません。 –

0

2つの矢印:あなたはあなたのロジックを実行するには、以下のようなあなたのメインクラスであなたのQTbuttonsにリスナーを追加する必要があります(また、私はスイッチング用の任意の矢印のウィジェットが表示されません)例では{your QPushButton}.clicked.connect(lambda: {your QStackedWidget}.setCurrentIndex({another page}))

:あなたはあなたがページを変更するためのボタンを使用することができ、容易

+0

@ekhumoro:追加できる金額に制限がある場合はどうなりますか?私が新しいものであるという事実のために、元の投稿に2つ以上の画像を追加することはできません。討論しようとしていない。ただし、あなたがそのポイントを証明するために追加できるものが限られている場合は、特定性と明快さを提供するのは難しいです。エルゴ、私の精神的なことをお詫び申し上げます。おそらく、あなたはこれらのケースの代替ソリューションを持っていますか?もしそうなら、私は聞くのが大好きです。最高の、Jeremy –

+0

@ JeremyStiefel。とにかくあなたの質問を編集してください。必要な担当者がいる人は、後でリンクを修正できます。十分な担当者がいないためにできることは限られているので、単純な解決策は単に[もっと多くの担当者を得る]ことです(https://stackoverflow.com/help/whats-reputation)。 – ekhumoro

1

それらを切り替えることができるように(下のメッセージで)、アプリケーションにデザイナーでその機能を引き継がないでください。

# -*- coding: utf-8 -*- 

# Form implementation generated from reading ui file 'stackedWidget.ui' 
# 
# Created by: PyQt4 UI code generator 4.11.4 
# 
# WARNING! All changes made in this file will be lost! 

from PyQt4 import QtCore, QtGui 
import sys 


try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(512, 304) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     self.stackedWidget = QtGui.QStackedWidget(self.centralwidget) 
     self.stackedWidget.setGeometry(QtCore.QRect(150, 60, 161, 121)) 
     self.stackedWidget.setObjectName(_fromUtf8("stackedWidget")) 
     self.page = QtGui.QWidget() 
     self.page.setObjectName(_fromUtf8("page")) 
     self.wgtMainWindow = QtGui.QPushButton(self.page) 
     self.wgtMainWindow.setGeometry(QtCore.QRect(50, 50, 75, 23)) 
     self.wgtMainWindow.setObjectName(_fromUtf8("wgtMainWindow")) 
     self.stackedWidget.addWidget(self.page) 
     self.page_2 = QtGui.QWidget() 
     self.page_2.setObjectName(_fromUtf8("page_2")) 
     self.wgtbtnB = QtGui.QPushButton(self.page_2) 
     self.wgtbtnB.setGeometry(QtCore.QRect(50, 50, 75, 23)) 
     self.wgtbtnB.setObjectName(_fromUtf8("wgtbtnB")) 
     self.stackedWidget.addWidget(self.page_2) 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.menubar = QtGui.QMenuBar(MainWindow) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 512, 21)) 
     self.menubar.setObjectName(_fromUtf8("menubar")) 
     MainWindow.setMenuBar(self.menubar) 
     self.statusbar = QtGui.QStatusBar(MainWindow) 
     self.statusbar.setObjectName(_fromUtf8("statusbar")) 
     MainWindow.setStatusBar(self.statusbar) 

     self.retranslateUi(MainWindow) 
     self.stackedWidget.setCurrentIndex(1) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) 
     self.wgtMainWindow.setText(_translate("MainWindow", "Widget A", None)) 
     self.wgtbtnB.setText(_translate("MainWindow", "Widget B", None)) 


class ControlMainWindow(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(ControlMainWindow, self).__init__(parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 

     self.ui.wgtbtnB.clicked.connect(lambda : self.ui.stackedWidget.setCurrentIndex(0)) 
     self.ui.wgtMainWindow.clicked.connect(lambda : self.ui.stackedWidget.setCurrentIndex(1)) 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    mySW = ControlMainWindow() 
    mySW.show() 
    sys.exit(app.exec_()) 

スタートアプリ:クリックされたボタンの後

enter image description here

:別のボタンをクリックした後

enter image description here

enter image description here

関連する問題