关闭一个 main window 并打开另一个(传递一个 arg)
Close one main window and open another one (with passing an arg)
基本上我有一个启动器类型的交易,用于在最新版本 python 中使用 pyside2 / pyqt 的应用程序。在启动器中按下按钮后,我希望它关闭当前的 window class 并打开下一个 window(它有自己的 class)。在执行此操作时,我希望它将文件名传递给新的 window(基本上,告诉它要打开哪个文件)。这是我正在努力的部分。以下代码片段是我目前所拥有的代码片段,我认为这对更好地帮助解释问题很重要!
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_())
您可以创建一个带有字符串参数的信号,它会在您的主程序 window 结束时发出,或者在发出信号然后关闭 window 的方法中发出(这是我最有可能选择自己的方式)。
至于将该信号连接到哪个插槽,这取决于您,您可以拥有一个全局级别的函数,或者子类化 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()
基本上我有一个启动器类型的交易,用于在最新版本 python 中使用 pyside2 / pyqt 的应用程序。在启动器中按下按钮后,我希望它关闭当前的 window class 并打开下一个 window(它有自己的 class)。在执行此操作时,我希望它将文件名传递给新的 window(基本上,告诉它要打开哪个文件)。这是我正在努力的部分。以下代码片段是我目前所拥有的代码片段,我认为这对更好地帮助解释问题很重要!
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_())
您可以创建一个带有字符串参数的信号,它会在您的主程序 window 结束时发出,或者在发出信号然后关闭 window 的方法中发出(这是我最有可能选择自己的方式)。
至于将该信号连接到哪个插槽,这取决于您,您可以拥有一个全局级别的函数,或者子类化 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()