移动窗体上的按钮

To move a qbutton on a form

我从 Qbutton 构建了自己的按钮 class 并想在我的表单上安排一批我的按钮。问题是它们只是显示在我表单的右下角——完全忽略我的 "move" 方法。 (Python 3 + Qt5) 谢谢!

Blist = [
["Quit",1250,750],
["LoadAny",1250,850]
        ]
class lb(QPushButton):
    def __init__(self, t, parent=None):
        QPushButton.__init__(self, t, parent)
        self.setText(t.split("_")[1])
        self.setFixedHeight(ButtonH)
        self.setFixedWidth(ButtonW)
        self.setStyleSheet("background-color:white;")
        self.setObjectName(t.split("_")[0])
        self.setFont(QFont("Times", 12, QFont.StyleNormal))

class MyWindow(QWidget):
       …     
        buttons = {}
        self.layout = QVBoxLayout(self)        
        for i in range(len(Blist)):
            buttons[i] = lb('%d_%s' %(i,Blist[i][0]))
            self.layout.addWidget(buttons[i])
            buttons[i].move(Blist[i][1],Blist[i][2])
            buttons[i].clicked.connect(self.bclick)

当您将小部件添加到布局时,它负责管理位置策略,在您的情况下,您已将它们添加到 QVBoxLayout,因此它们将垂直分布:

如果你想添加它并且你可以自由移动它不使用布局,你必须作为父级传递给你想要放置它的小部件,因为它会被放置在上角但是现在如果您可以使用 move() 函数:

Blist = [
    ["Quit",50,250],
    ["LoadAny",250,350]
]
ButtonH = 40
ButtonW = 80

class lb(QPushButton):
    def __init__(self, t, parent=None):
        QPushButton.__init__(self, t, parent)
        self.setText(t.split("_")[1])
        self.setFixedHeight(ButtonH)
        self.setFixedWidth(ButtonW)
        self.setStyleSheet("background-color:white;")
        self.setObjectName(t.split("_")[0])
        self.setFont(QFont("Times", 12, QFont.StyleNormal))

class MyWindow(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        buttons = {}
        #self.layout = QVBoxLayout(self)        
        for i in range(len(Blist)):
            buttons[i] = lb('%d_%s' %(i,Blist[i][0]), self)
            #self.layout.addWidget(buttons[i])
            buttons[i].move(Blist[i][1],Blist[i][2])
            buttons[i].clicked.connect(self.bclick)

    def bclick(self):
        print("click")