绝对位置小部件

Absolute Position Widgets

很困惑,我查看了多个其他堆栈溢出页面:

class launcherWidget( QMainWindow ) :
    def __init__(self) :
        QMainWindow.__init__(self)
        self.setWindowTitle("Scouting Software Launcher")
        #self.setGeometry(100, 100, 100, 100)
        self.table = QTableWidget()
        self.table.setColumnCount(3)
        self.table.setHorizontalHeaderLabels(["Save Name", "Mod Date","Creation Date"])
        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        #self.layout = QHBoxLayout()
        #self.layout.addWidget(self.table)
        #self.setLayout(self.layout)
        self.table.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.table.verticalHeader().setVisible(False)
        self.fill_table_with_list([["savename","mod date","creat"],["c","b","a"]])
        #self.table.resize(100,100)
        self.table.setGeometry( QRect( 50, 50, 100, 100 ) )
        #self.table.move(50,50)
        #self.show()
        self.b0 = QPushButton("New")
        self.b0.clicked.connect(self.newClicked)
        #self.layout.addWidget(self.b0,)
        #self.b0.move(0,0)
        self.b1 = QPushButton("Rename")
        self.b1.clicked.connect(self.renameClicked)
        #self.layout.addWidget(self.b1)
        #self.b1.move(300,500)
    def newClicked(self) :
        print("placeholder")
    def renameClicked(self):
        r = self.table.currentRow() 
        savename = str( self.table.item(r,0).text() )           
    def fill_table_with_list (self, data=[[]]) : 
        for row in reversed(data) :
            saveName = QTableWidgetItem(row[0])
            modDate = QTableWidgetItem(row[1])
            creaDate =QTableWidgetItem(row[2])
            self.table.insertRow(0)
            self.table.setItem(0, 0, saveName)
            self.table.setItem(0, 1, modDate) 
            self.table.setItem(0, 2, creaDate)   
    @Slot()
    def exit_app(self, checked):
        QApplication.quit()
def onLaunch () :
    app = QApplication(sys.argv)
    window = launcherWidget() # screen = before change
    #window.resize(500, 300) #can always be fullscreened
    window.resize(1820,980)
    window.show()
    sys.exit(app.exec_())
if __name__ == "__main__": 
    onLaunch()

尝试使用绝对定位,但我无法显示我的 table,我得到的只是一个空白 window,里面什么也没有。我宁愿不必使用布局,但到目前为止,这似乎是显示 table 和按钮的唯一方法。我注释掉的所有内容都是试图让它发挥作用。 table.show() 似乎只是在单独的 window 中显示 table。 .move() 似乎什么都不做,最近尝试了 setGeometry() 也不起作用。我什至还没有尝试让按钮显示出来,我无法想象我会得到不同的结果。我一开始以为我的坐标错了,但我经过反复试验排除了那个错误

TL; DR; 作为小部件的父级传递给 window


如果一个小部件是另一个小部件的子部件,则它被绘制在另一个小部件上,在您的情况下既不是 QTableWidget 也不是 QPushButton,在布局的情况下,除了处理位置和大小之外,它们还建立为它所处理的widget到它所安顿的widget。

class launcherWidget(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.setWindowTitle("Scouting Software Launcher")
        self.table = QTableWidget(<b>self</b>)
        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([["savename", "mod date", "creat"], ["c", "b", "a"]])
        self.table.setGeometry(QRect(50, 50, 100, 100))
        self.b0 = QPushButton("New", <b>self</b>)
        self.b0.clicked.connect(self.newClicked)
        self.b0.move(0,0)
        self.b1 = QPushButton("Rename", <b>self</b>)
        self.b1.clicked.connect(self.renameClicked)
        self.b1.move(300,500)
    # ...