python - 如何在pyside2中关闭另一个窗口?
问题描述
我有 2 个窗口:MainWindow 和一个普通窗口,我在 MainWindow 中有一个按钮可以打开第二个窗口,我在第二个窗口中有一个按钮,我希望在单击第二个窗口中的按钮时关闭 MainWindow。这两个窗口位于不同的类和文件中。
这是主窗口
from select_company_controller import SelectCompany
from views.main_window_view import MainWindowForm
from PySide2 import QtWidgets, QtCore, QtGui
import sys
class MainWindow(QtWidgets.QMainWindow, MainWindowForm):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.button.clicked.connect(self.open_select_company_window)
def open_select_company_window(self):
self.window = SelectCompany()
self.window.show()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.showMaximized()
sys.exit(app.exec_())
这是第二个窗口
from PySide2 import QtWidgets, QtCore, QtGui
from views.select_company_view import SelectCompanyForm
class SelectCompany(QtWidgets.QWidget, SelectCompanyForm):
def __init__(self):
super(SelectCompany, self).__init__()
self.setupUi(self)
self.button.clicked.connect(close_main_window)
def close_main_window(self):
pass
解决方案
试试看:
主文件
import sys
#from PySide2 import QtWidgets, QtCore, QtGui
from PyQt5 import QtWidgets, QtCore, QtGui
from select_company_controller import SelectCompany
#from views.main_window_view import MainWindowForm
class MainWindow(QtWidgets.QMainWindow): #, MainWindowForm):
def __init__(self):
super(MainWindow, self).__init__()
# self.setupUi(self)
self.setWindowTitle('Main Window')
centralWidget = QtWidgets.QWidget()
self.setCentralWidget(centralWidget)
button = QtWidgets.QPushButton('Open SelectCompany')
button.clicked.connect(self.open_select_company_window)
grid = QtWidgets.QGridLayout(centralWidget)
grid.addWidget(button)
def open_select_company_window(self):
self.window = SelectCompany(self)
self.window.show()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show() #showMaximized()
sys.exit(app.exec_())
select_company_controller.py
#from PySide2 import QtWidgets, QtCore, QtGui
from PyQt5 import QtWidgets, QtCore, QtGui
#from views.select_company_view import SelectCompanyForm
class SelectCompany(QtWidgets.QMainWindow): #QWidget, SelectCompanyForm):
def __init__(self, parent=None):
super(SelectCompany, self).__init__(parent)
self.parent = parent
self.setWindowTitle('SelectCompany')
centralWidget = QtWidgets.QWidget()
self.setCentralWidget(centralWidget)
button = QtWidgets.QPushButton('Close MainWindow')
button.clicked.connect(self.close_main_window)
grid = QtWidgets.QGridLayout(centralWidget)
grid.addWidget(button)
def close_main_window(self):
self.parent.hide()
更新
#from PySide2 import QtWidgets, QtCore, QtGui
from PyQt5 import QtWidgets, QtCore, QtGui
#from views.select_company_view import SelectCompanyForm
class SelectCompany(QtWidgets.QWidget): #, SelectCompanyForm): # <--- QWidget
def __init__(self, parent=None):
super(SelectCompany, self).__init__(parent)
self.parent = parent
self.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.WindowStaysOnTopHint) # <---
self.setWindowTitle('SelectCompany')
button = QtWidgets.QPushButton('Close MainWindow')
button.clicked.connect(self.close_main_window)
grid = QtWidgets.QGridLayout(self)
grid.addWidget(button)
def close_main_window(self):
self.parent.hide()
推荐阅读
- flutter - 在颤动中移动小部件
- python - 读取大型 csv 文件 python 和 panda
- javascript - 每行的自动时间戳脚本
- html - 带有水平子菜单的水平导航 - 下划线消失
- android - 如何从 Flutter 中名称中包含空格的资产访问图像文件?
- swift - 如何循环播放反向播放的 AVPlayer?
- typeorm - 自定义排序类型
- r - R Shiny ggplot 对 varSelectInput 反应
- python - 尝试连接 Django 和 MySQL
- python - 使用 BeautifulSoup 发送 POST 请求时出现 ViewExpiredException