Python 关闭一个主窗口并打开另一个主窗口(传递参数)

Python 关闭一个主窗口并打开另一个主窗口(传递参数),python,pyqt,pyside2,Python,Pyqt,Pyside2,基本上,我有一个最新版本python中pyside2/pyqt应用程序的启动程序类型交易。在启动程序中按下按钮后,我希望它关闭当前窗口类并打开下一个窗口(它有自己的类)。在执行此操作时,我希望它将文件名传递给新窗口(基本上,告诉它要打开哪个文件)。这是我正在努力解决的问题。以下代码片段是我到目前为止所拥有的代码片段,我认为这些代码片段对于更好地解释这个问题非常重要 class launcherWidget( QMainWindow ) : def __init__(self) :

基本上,我有一个最新版本python中pyside2/pyqt应用程序的启动程序类型交易。在启动程序中按下按钮后,我希望它关闭当前窗口类并打开下一个窗口(它有自己的类)。在执行此操作时,我希望它将文件名传递给新窗口(基本上,告诉它要打开哪个文件)。这是我正在努力解决的问题。以下代码片段是我到目前为止所拥有的代码片段,我认为这些代码片段对于更好地解释这个问题非常重要

class launcherWidget( QMainWindow ) :
    def __init__(self) :
        #header
        QMainWindow.__init__(self)
        self.setWindowTitle("Scouting Software Launcher")

        #main central table
        self.table = QTableWidget(self)
        self.table.setColumnCount(3)
        self.table.setHorizontalHeaderLabels(["Save Name", "Mod Date","Creation Date"])
        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        self.table.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.table.verticalHeader().setVisible(False)
        self.fill_table_with_list( listOfSavesLists )
        self.table.resize(470,165)
        self.table.move(15,50)


        self.b4 = QPushButton("Open",self)
        self.b4.clicked.connect(self.openSelected) #wip
        self.b4.resize(70,25)
        self.b4.move(340,225) 

        self.b5 = QPushButton("View",self)
        self.b5.clicked.connect(self.viewSelected) #wip
        self.b5.resize(70,25)
        self.b5.move(420,225)

    def viewSelected ( self ) :
        print("placeholder") #THIS POINT TO CALL NEXT FUNCTION (I want to send a string)

    def openSelected ( self ) :
        print("placeholder")

    @Slot()
    def exit_app(self, checked):
        QApplication.quit()

    class viewWindow( QMainWindow ) :
    def __init__( self , savename ) : #STRING TRANSFERED = savename
        #header
        QMainWindow.__init__(self)
        self.setWindowTitle("Scouting Software Viewer")
        self.openSaveName = str(savename) #deal with arg

    @Slot()
    def exit_app(self, checked) : #on exit, shutdown properly
        QApplication.quit() 

    def onLaunch () :
        app = QApplication(sys.argv)
        window = launcherWidget() 
        window.resize(500,300)
        window.show()
        sys.exit(app.exec_())



您可以使用字符串参数创建一个信号,该参数在主窗口关闭时发出,或者在发出信号然后关闭窗口的方法中发出(这是我最可能选择的方式)

至于将该信号连接到哪个插槽,这取决于您,您可以有一个全局级别的函数,或者子类QApplication并在其中添加一个方法,或者我相信还有其他方法

from PySide2 import QtWidgets, QtCore
import sys


class launcherWidget(QtWidgets.QMainWindow):

    launch_signal = QtCore.Signal(str)

    def __init__(self):
        # header
        QtWidgets.QMainWindow.__init__(self)
        self.setWindowTitle("Scouting Software Launcher")

        # main central table
        self.table = QtWidgets.QTableWidget(self)
        self.table.setColumnCount(3)
        self.table.setHorizontalHeaderLabels(["Save Name", "Mod Date", "Creation Date"])
        self.table.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
        self.table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.table.verticalHeader().setVisible(False)
        self.table.setRowCount(1)
        item = QtWidgets.QTableWidgetItem("Placeholder")
        self.table.setItem(0, 0, item)
        self.table.resize(470, 165)
        self.table.move(15, 50)

        self.b4 = QtWidgets.QPushButton("Open", self)
        self.b4.clicked.connect(self.openSelected)  # wip
        self.b4.resize(70, 25)
        self.b4.move(340, 225)

        self.b5 = QtWidgets.QPushButton("View", self)
        self.b5.clicked.connect(self.viewSelected)  # wip
        self.b5.resize(70, 25)
        self.b5.move(420, 225)

    def viewSelected(self):
        self.launch_signal.emit('Placeholder')
        self.close()

    def openSelected(self):
        print("placeholder")

    def exit_app(self, checked):
        QtWidgets.QApplication.quit()


class viewWindow(QtWidgets.QMainWindow):
    def __init__(self, savename):  # STRING TRANSFERED = savename
        # header
        QtWidgets.QMainWindow.__init__(self)
        self.setWindowTitle("Scouting Software Viewer")
        self.openSaveName = str(savename)  # deal with arg
        label = QtWidgets.QLabel(self.openSaveName)
        self.setCentralWidget(label)

    def exit_app(self, checked):  # on exit, shutdown properly
        QtWidgets.QApplication.quit()


def start_view_window(argument):
    global view  # Using a global now to avoid garbage collection, but other ways would be better
    view = viewWindow(argument)
    view.show()


def onLaunch():
    app = QtWidgets.QApplication(sys.argv)
    window = launcherWidget()
    window.resize(500, 300)
    window.launch_signal.connect(start_view_window)
    window.show()
    sys.exit(app.exec_())

onLaunch()

嗯,我想把我的头绕在这里发生的事情上,但它起作用了!对此,我不能抱怨!!!除了QTCore.Signal,我都有了,但我能用谷歌搜索它是件好事!非常感谢你!信号与示例中使用的button.clicked类似。单击是QPUSH按钮上的信号。这里我定义了一个自定义的。看见