2016-12-20 4 views
1

에서 위젯을 전환하는 방법은 부모 객체 내부에 두 개의 서로 다른 페이지 (각각 PAGE1페이지 2) (OBJECTNAME에 배치 두 개의 버튼 ( & wgtbtnB wgtbtnA)가). 내 딜레마는 이것입니다 : 코드를 실행하면 화살표가 PyQt에 표시되지 않습니다. 왜? page1에서 page2로 또는 그 반대로 어떻게 대체합니까?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의 오른쪽 상단 모서리에는 검은 색 화살표가 두 개 있습니다. –

+0

QT 디자이너를 사용하여 UI를 만드십니까? 그렇다면 디자이너에서 볼 수있는 두 개의 화살표가 응용 프로그램으로 넘어 가지 않으므로 디자이너의 기능에 따라 쉽게 전환 할 수 있습니다. – ECM

+0

알립니다. 그래서 그들을 프로그래밍 방식으로 운반하는 방법은 없습니다. 맞습니까? –

0

두 개의 화살표 : 당신이 당신의 논리를 실행하기 위해 아래처럼 메인 클래스에 QTbuttons에 리스너를 추가해야합니다 (또한 내가 전환에 대한 화살표 위젯을 볼 수 없습니다) 응용 프로그램에 적용되지 않습니다 (아래 메시지), 디자이너에 그 기능이 너무 쉽게 전환 할 수 있습니다

+0

@ekhumoro : 추가 할 수있는 금액에 제한이 있다면 어떻게 될까요? 내가 새로운 것을 이유로 원래 게시물에 2 개 이상의 이미지를 추가 할 수 없습니다. 논쟁을하려고하지 않는다. 그러나 특이성과 명료성을 제공하는 것이 어려울 때, 귀하가 그 점을 증명하기 위해 추가 할 수있는 것에 제한이있을 때. 에고, 내 nescience에 대해 사과드립니다. 아마도 이러한 경우에 대한 대체 솔루션이 있습니까? 그렇다면 듣고 싶습니다.최고 감사합니다, Jeremy –

+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