我知道這個問題已經被問過多次,但我很難理解例子,所以我只有這個第一個螢屏,我想要,當我點擊這個時Go to page 2 button,它應該切換到second screen而不打開其他視窗。
步驟 -1 單擊 Go to page 2 button

步驟 -2 切換到 2nd screen

步驟 -3 切換回 1st screen
這是我對兩個螢屏都有的代碼,我不想加載UI檔案
################ File1.py##############
class Ui_PageFirst(object):
def setupUi(self, PageFirst):
PageFirst.setObjectName("PageFirst")
PageFirst.resize(123, 132)
self.centralwidget = QtWidgets.QWidget(PageFirst)
self.centralwidget.setObjectName("centralwidget")
self.FirstPageLable = QtWidgets.QLabel(self.centralwidget)
self.FirstPageLable.setGeometry(QtCore.QRect(0, 0, 121, 71))
self.FirstPageLable.setAlignment(QtCore.Qt.AlignCenter)
self.FirstPageLable.setObjectName("FirstPageLable")
self.btn1 = QtWidgets.QPushButton(self.centralwidget)
self.btn1.setGeometry(QtCore.QRect(20, 80, 75, 23))
self.btn1.setObjectName("btn1")
PageFirst.setCentralWidget(self.centralwidget)
self.retranslateUi(PageFirst)
QtCore.QMetaObject.connectSlotsByName(PageFirst)
def retranslateUi(self, PageFirst):
_translate = QtCore.QCoreApplication.translate
PageFirst.setWindowTitle(_translate("PageFirst", "MainWindow"))
self.FirstPageLable.setText(_translate("PageFirst", "This is page First."))
self.btn1.setText(_translate("PageFirst", "Go to page 2"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
PageFirst = QtWidgets.QMainWindow()
ui = Ui_PageFirst()
ui.setupUi(PageFirst)
PageFirst.show()
sys.exit(app.exec_())
################ File2.py##############
class Ui_PageSecond(object):
def setupUi(self, PageSecond):
PageSecond.setObjectName("PageSecond")
PageSecond.resize(123, 132)
self.centralwidget = QtWidgets.QWidget(PageSecond)
self.centralwidget.setObjectName("centralwidget")
self.secondPageLable = QtWidgets.QLabel(self.centralwidget)
self.secondPageLable.setGeometry(QtCore.QRect(0, 0, 121, 71))
self.secondPageLable.setAlignment(QtCore.Qt.AlignCenter)
self.secondPageLable.setObjectName("secondPageLable")
self.btn2 = QtWidgets.QPushButton(self.centralwidget)
self.btn2.setGeometry(QtCore.QRect(20, 80, 75, 23))
self.btn2.setObjectName("btn2")
PageSecond.setCentralWidget(self.centralwidget)
self.retranslateUi(PageSecond)
QtCore.QMetaObject.connectSlotsByName(PageSecond)
def retranslateUi(self, PageSecond):
_translate = QtCore.QCoreApplication.translate
PageSecond.setWindowTitle(_translate("PageSecond", "MainWindow"))
self.secondPageLable.setText(_translate("PageSecond", "This is page Second."))
self.btn2.setText(_translate("PageSecond", "Go to page 1"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
PageSecond = QtWidgets.QMainWindow()
ui = Ui_PageSecond()
ui.setupUi(PageSecond)
PageSecond.show()
sys.exit(app.exec_())
uj5u.com熱心網友回復:
你必須使用QStackedWidget。
class Ui_PageFirst(QMainWindow): #Page1
def changeToPage2(self):
widget.setCurrentWidget(secondpage)
class Ui_PageSecond(QMainWindow): #Page2
def changeToPage1(self):
widget.setCurrentWidget(firstpage)
app = QApplication(sys.argv)
widget = QtWidgets.QStackedWidget()
#######
firstpage = Ui_PageFirst()
widget.addWidget(firstpage) # create an instance of the first page class and add it to stackedwidget
secondpage = Ui_PageSecond()
widget.addWidget(secondpage) # adding second page
widget.setCurrentWidget(firstpage) # setting the page that you want to load when application starts up. you can also use setCurrentIndex(int)
########
widget.show()
app.exec_()
uj5u.com熱心網友回復:
為此,您將需要 3 個 UI。只需按照以下程式操作:
使用此結構創建一個 main_UI :(
QMainWindow > QFrame (centralWidget) > QLayout > another_q_frame此框架將包含您的兩個主要頁面)現在創建另外 2 個
QWidget(讓我們稱它們為screen_1&screen_2)視窗,每個視窗包含一個按鈕(此按鈕將用于在螢屏之間切換)screen_1以another_q_frame of main_UI編程方式添加。例如:如果您使用 qtdesigner,您可以簡單地呼叫.Setup UI(another_q_frame). 還有很多其他方法可以做到這一點。現在創建一個函式,它將在 another_q_frame 中切換 Qwidget(screen_1 和 screen_2)。前任:
def switch_fctn(self, class_instance):
class_instance.setupUI(self.another_q_frame)
- 最后,只需將此函式連接到我們在 screen_1 和 screen_2 中使用
self.button.clicked.connect(lambda: self.switch_fctn(screen_1_class_instance))screen_2 按鈕創建的那些按鈕,并對screen_1 按鈕執行相同操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/369710.html
