如何把QTableWidgetchildwindow放在parentwindow前面或者parentwindow下面?

How to put QTableWidget child window in front of parent window or below the parent window?

我正在尝试制作一个简单的输入表单,它接受某些输入并在 table 中显示输出。 根据代码,我得到以下输出。

但我正在寻找以下输出。

以下是我尝试过的代码片段。

import sys
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import *
from PyQt5.QtCore import *

# Subclass QMainWindow to customize your application's main window
class MainWindow(QWidget):

        def __init__(self):
                super().__init__()

                self.initUI()

        def initUI(self):

                self.setWindowTitle("Check Distance Travelled By Vehicles")

                self.vehicleNamelbl = QLabel('VehicleName : ')
                self.vehicleNamecombo = QComboBox()
                self.vehicleNamecombo.addItem('SwitftDzire')

                self.dateEdit    = QDateEdit()
                self.dateEdit.__init__(calendarPopup=True)
                self.dateEdit.setDateTime(QtCore.QDateTime.currentDateTime())
                self.dateEdit.editingFinished.connect(lambda: date_method())

                self.petrolCB = QCheckBox('Petrol')
                self.petrolCB.setChecked(True)
                self.dieselCB = QCheckBox('Diesel')
                self.dieselCB.setChecked(False)

                self.petrolCB.stateChanged.connect(self.checkpetrolCB)
                self.dieselCB.stateChanged.connect(self.checkdieselCB)

                self.submitBtn    = QPushButton('Submit ')
                # adding action to the date when enter key is pressed
                self.submitBtn.clicked[bool].connect(self.collecInput)

                grid = QGridLayout()
                grid.setSpacing(10)

                grid.addWidget(self.vehicleNamelbl,1,0)
                grid.addWidget(self.vehicleNamecombo,1,1)
                grid.addWidget(self.dateEdit,1,2)
                grid.addWidget(self.petrolCB,1,3)
                grid.addWidget(self.dieselCB,1,4)
                grid.addWidget(self.submitBtn,1,5)

                # geometry of the main window
                qtRectangle = self.frameGeometry()
                # center point of screen
                centerPoint = QDesktopWidget().availableGeometry().center()
                # move rectangle's center point to screen's center point
                qtRectangle.moveCenter(centerPoint)
                 # top left of rectangle becomes top left of window centering it
                self.move(qtRectangle.topLeft())

                self.setLayout(grid)
                self.show()

                # method called by date edit 
                def date_method():
                        print('Inside date_method')
                        # getting the date 
                        value = self.dateEdit.date()
                        print(value)
                        print(value.toPyDate())

        def checkpetrolCB(self,checked):
                if checked :
                        print('Petrol Vehicle Is Selected')
                        self.OdFlag = 1
                else:
                        print('Petrol Vehicle Is De-Selected')

        def checkdieselCB(self,checked):
                if checked :
                        print('Diesel Vehicle Is Selected')
                        self.OdFlag = 2
                else:
                        print('Diesel Vehicle Is De-Selected')

        def collecInput(self) :

                print('Submit Button Pressed!! Inputs Selected')

                print(self.vehicleNamecombo.currentText())
                print(self.dateEdit.date().toPyDate())

                if self.petrolCB.isChecked() == True and self.dieselCB.isChecked() == False :
                    print('Petrol Vehicle Is Selected')

                if self.dieselCB.isChecked() == True and self.petrolCB.isChecked() == False :
                    print('Diesel Vehicle Is Selected')

                if self.petrolCB.isChecked() == True and self.dieselCB.isChecked() == True :
                    print('Both Petrol And Diesel Vehicle Are Selected')
                    msgBox = QMessageBox()
                    msgBox.setIcon(QMessageBox.Critical)
                    msgBox.setText('Select Either Petrol Or Diesel')
                    msgBox.setWindowTitle("Alert PopUp")
                    returnValue = msgBox.exec_()
                    return

                # Call A Module To Get The List Of Files Present As per The Input
                vehicleFileList = [ 'dist_SwitftDzire_CityA.13OCT2020','dist_SwitftDzire_CityB.13OCT2020','dist_SwitftDzire_CityC.13OCT2020']

                print('Back to collecInput')
                print(vehicleFileList)
                print('Num Of Files Found : '+str(len(vehicleFileList)))

                numOfFiles = len(vehicleFileList)

                if numOfFiles == 0 : # No Files Have Been Detected
                    print('No Files Found')
                    msgBox = QMessageBox()
                    msgBox.setIcon(QMessageBox.Critical)
                    msgBox.setText('No Files Found')
                    msgBox.setWindowTitle("Alert PopUp")
                    returnValue = msgBox.exec_()

                else: # Atleast 1 File Is Detected
                    print('Populating table entries')
                    table = MyTable(vehicleFileList, numOfFiles, 2, self)
                    # add Qt.Window to table's flags 
                    table.setWindowFlags(table.windowFlags() | Qt.Window)
                    table.show()
class MyTable(QTableWidget):
        def __init__(self, vehicleFileList, *args):
                QTableWidget.__init__(self, *args)
                self.data = vehicleFileList
                self.setWindowFlags(Qt.WindowStaysOnTopHint)
                self.resizeColumnsToContents()
                self.resizeRowsToContents()
                self.horizontalHeader().setStretchLastSection(False)
                self.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
                self.setHorizontalHeaderLabels(['Available Vehicle Data Files','Missing Files'])

                print('Inside MyTable')
                print(vehicleFileList)

                rowCount=0

                for item in vehicleFileList :
                        print(item)
                        self.setItem(rowCount,0,QTableWidgetItem(item))
                        rowCount+=1


def main():
        app = QApplication(sys.argv)
        window = MainWindow()
        sys.exit(app.exec_())

if __name__ == '__main__':
    main()

我需要进行哪些更改才能获得我选择的 window 定位?

注:第二个window不是第一个window的子代。

想法是计算第一个 window 的几何形状并使用该信息修改第二个 window 的几何形状:

table = MyTable(vehicleFileList, numOfFiles, 2, self)
# add Qt.Window to table's flags
table.setWindowFlags(table.windowFlags() | Qt.Window)
table.resize(self.width(), table.sizeHint().height())
table.window().move(self.geometry().bottomLeft())
table.show()