Python 在pyside2中,一个窗口与另一个窗口的距离有多近?

Python 在pyside2中,一个窗口与另一个窗口的距离有多近?,python,python-3.x,pyside2,Python,Python 3.x,Pyside2,我有两个窗口:MainWindow和一个普通窗口,我在MainWindow中有一个按钮打开第二个窗口,我在第二个窗口中有一个按钮,我想在单击第二个窗口中的按钮时关闭MainWindow。这两个窗口位于不同的类和文件中 这是主窗口 这是第二个窗口 试试看: main.py import sys #from PySide2 import QtWidgets, QtCore, QtGui from PyQt5 import QtWidgets, QtCore, QtGui from select_c

我有两个窗口:MainWindow和一个普通窗口,我在MainWindow中有一个按钮打开第二个窗口,我在第二个窗口中有一个按钮,我想在单击第二个窗口中的按钮时关闭MainWindow。这两个窗口位于不同的类和文件中

这是主窗口

这是第二个窗口

试试看:

main.py

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_())
#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()

选择公司控制者.py

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_())
#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()
#从PySide2导入QtWidgets、QtCore、QtGui
从PyQt5导入QtWidgets、QtCore、QtGui
#从views.select\u company\u视图导入SelectCompanyForm

类SelectCompany(QtWidgets.QWidget):#,SelectCompanyForm):#为什么要使用两个单独的窗口?为什么不用您计划使用的新的中心窗口小部件替换中心窗口小部件?打开第二个窗口会产生大量不必要的额外开销??用于维护,每个窗口都会有更多的代码。是的,但是如果两者都基于QMainWindow——那么您可以为CentralWidget创建外部类——然后简单地交换它们和MenuTool栏(如果需要进行分类的话)我并不是在吹毛求疵——当我创建主窗口时,我总是将CentralPanel和MenuToolBar作为子类,这样我就可以很容易地将它们换成另一个集合,甚至可以从代码中进行交换——这些可以是非常复杂的自包含类基本上,QMainWindow只是一个真正Gui的容器处理程序,它是你的CenterWidget对象吗?给我一点你想说的话的示例或链接我将尝试一下。第二个窗口将显示,没有背景和标题栏。可能是因为继承了我用设计器生成的文件。没有其他方法来做我想做的事情吗?@Arthur我添加了一个更新的模块
select_company\u controller.py
好的,它可能会工作,但它看起来确实是更难做的方法。