2016-12-20 79 views
1

我有放置在父對象內的兩個不同的頁面(分別第1頁第2頁,)(對象名兩個按鈕(wgtbtnA & wgtbtnB):stackedWidget )。我的困境是:當我運行代碼時,箭頭不顯示在PyQt中。爲什麼?我如何從page1切換到page2,反之亦然?PyQt的:如何切換部件在QStackedWidget

這裏是運行時的圖像傳達什麼,我要求:

btnwgtB

Qt設計:

btnwgtA

我想保持這些小放冷箭。

下面是我的代碼:

# -*- 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

你有你的ControlMainWindow類是沒有道理可小部件之間進行切換。 (我還沒有看到任何切換部件箭頭),你需要一個聽衆在主類添加到您的QTbuttons像下面來執行你的邏輯:

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

對不起。我應該更具體。我知道如何連接信號和插槽。我的問題是,pyqt自動格式箭頭去哪裏。通常,stackedWidgets的右上角有兩個黑色箭頭。 –

+0

你使用QT設計器來創建UI嗎?如果是這樣,您在設計器中看到的兩個箭頭不會傳遞到您的應用程序,它在設計器中的功能,因此您可以輕鬆地在它們之間切換 – ECM

+0

明白了。所以沒有辦法以編程方式將它們帶過來,對嗎? –

0

兩個箭頭您在設計師看(下面的消息),不結轉到您的應用程序,它在設計的功能,所以你可以在它們之間輕鬆切換

+0

@ekhumoro:如果你受限於你可以添加的數量會怎麼樣。由於我是新人,所以不會讓我在原始帖子中添加超過2張圖片。不要爭辯;然而,當你限制了你可以添加的內容來證明這一點時,很難提供明確性和清晰度。埃爾戈,我爲我的無知道歉。也許,你有這些案件的替代解決方案?如果是這樣,我很樂意聽到。最好的問候,傑里米 –

+0

@JeremyStiefel。無論如何編輯您的問題:有必要的代表的人可以稍後修復鏈接。由於沒有足夠的代表,所以你只能受限於你能做的事情,所以簡單的解決方案就是[獲得更多代表](https://stackoverflow.com/help/whats-reputation)。 – ekhumoro

1

您可以使用按鈕來改變頁面:{your QPushButton}.clicked.connect(lambda: {your QStackedWidget}.setCurrentIndex({another page}))

按示例:

# -*- 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

相關問題