0

我正在使用 PyQt 开发一个简单的应用程序。基本上,当我按下应用程序上的“返回屏幕 1”按钮时,screen 2会转到screen 1. 但是,它执行了screen 2两次的方法。

理解问题的最好方法是:

  1. 当应用程序启动时点击按钮Screen 2
  2. 点击按钮Go Back To Screen 1
  3. ok
  4. Screen 2再次点击按钮
  5. 点击按钮Go Back To Screen 1
  6. ok

执行此过程,pop 将在屏幕 1 上显示 2 次(该方法test被调用 3 次而不是 2)

为什么会发生这种情况,因为我在 Button 上只单击了两次Screen 2?我已经调试了代码,但没有找到解决此问题的方法。MVCE:

主要.py:

import sys
from PyQt5.QtWidgets import QApplication, QMessageBox
from PyQt5.QtWidgets import QMainWindow

from Ui_MainWindow import Ui_MainWindow

class MainWindow:
    def __init__(self):
        self.main_win = QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.main_win)

        self.ui.stackedWidget.setCurrentWidget(self.ui.page)

        self.ui.pushButton.clicked.connect(self.showScreen1)
        self.ui.pushButton_2.clicked.connect(self.showScreen2)

    def show(self):
        self.main_win.show()

    def test(self):
        print("Just a test")
        self.showPopUp()
        self.ui.stackedWidget.setCurrentWidget(self.ui.page)

    def showPopUp(self):
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setText("A window")
        msg.setInformativeText("A window")
        msg.setWindowTitle("AVISO")
        msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
        retval = msg.exec_()


    def showScreen1(self):
        self.ui.stackedWidget.setCurrentWidget(self.ui.page)

    def showScreen2(self):
        self.ui.stackedWidget.setCurrentWidget(self.ui.page_2)
        self.ui.pushButton_3.clicked.connect(self.test)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_win = MainWindow()
    main_win.show()
    sys.exit(app.exec_())

Ui_MainWindow.py:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(485, 239)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)
        self.stackedWidget.setGeometry(QtCore.QRect(20, 20, 451, 171))
        self.stackedWidget.setObjectName("stackedWidget")
        self.page = QtWidgets.QWidget()
        self.page.setObjectName("page")
        self.label = QtWidgets.QLabel(self.page)
        self.label.setGeometry(QtCore.QRect(180, 80, 91, 16))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.stackedWidget.addWidget(self.page)
        self.page_2 = QtWidgets.QWidget()
        self.page_2.setObjectName("page_2")
        self.label_2 = QtWidgets.QLabel(self.page_2)
        self.label_2.setGeometry(QtCore.QRect(180, 30, 91, 16))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.page_2)
        self.pushButton_3.setGeometry(QtCore.QRect(160, 130, 121, 23))
        self.pushButton_3.setObjectName("pushButton_3")
        self.stackedWidget.addWidget(self.page_2)
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(10, 200, 221, 31))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(250, 200, 221, 31))
        self.pushButton_2.setObjectName("pushButton_2")
        MainWindow.setCentralWidget(self.centralwidget)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "SCREEN 1"))
        self.label_2.setText(_translate("MainWindow", "SCREEN 2"))
        self.pushButton_3.setText(_translate("MainWindow", "Go back to Screen 1"))
        self.pushButton.setText(_translate("MainWindow", "SCREEN 1"))
        self.pushButton_2.setText(_translate("MainWindow", "SCREEN 2"))
4

0 回答 0