如何将QTableWidget子窗口置于父窗口之前或之下?

问题描述

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

但是我正在寻找以下输出

以下是我尝试的代码段。

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)
                grid.addWidget(self.dateEdit,2)
                grid.addWidget(self.petrolCB,3)
                grid.addWidget(self.dieselCB,4)
                grid.addWidget(self.submitBtn,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,QTableWidgetItem(item))
                        rowCount+=1


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

if __name__ == '__main__':
    main()

我需要进行哪些更改才能获得所选择的窗口位置?

解决方法

注意:第二个窗口不是第一个窗口的子窗口。

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

SELECT 
    cYear,cQuarter,foo,bar
FROM temp

CROSS APPLY
(
  VALUES
    (1,foo1,bar1),(2,foo2,bar2),(3,foo3,bar3),(4,foo4,bar4)

) c (cQuarter,bar)