在布局中移动小部件pyqt

问题描述 投票:1回答:1

嗨我在我的代码中有按钮我希望当用户按下插入新按钮时它将移动下面一行的所有其他按钮并在按下它之下创建一个新按钮这是我的代码

基本上我想在下面的一行中移动所有按钮,然后添加新按钮:

def Insert_Stage(self) :
    button = self.sender()
    idx = self.Layout.indexOf(button)
    location = self.Layout.getItemPosition(idx)

    x=location[0]
    z=self.Layout.rowCount()
    print(x,z)
    while(z >x+1):

        items= self.Layout.itemAt(z)
        # setting the item as widget 
        widget=items.widget()
        index= self.Layout.indexOf(widget)
        loc=self.Layout.getItemPosition(index)

        d=loc[0]
        y=loc[1]
        if y!=0:
            #widget.move(d+100,d)
            self.Layout.addWidget(widget,(d+1),1)
        else:
         self.Layout.addWidget(widget,d+1,0)
        z-=1

    stage=QtGui.QPushButton(self)
    stage.setObjectName(button.objectName())
    k=(int(button.objectName()[5:])+1)
    stage.setText('stage%d'%k)
    self.Layout.addWidget(stage,(location[0]+1),0)
python pyqt pyqt4 qlayout
1个回答
2
投票

假设你使用的是QVBoxLayout,你必须使用insertWidget()方法:

from PyQt4 import QtCore, QtGui

class Widget(QtGui.QLineEdit):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        lay = QtGui.QVBoxLayout(self)
        for i in range(5):
            btn = QtGui.QPushButton(
                'button {}'.format(i),
                clicked=self.on_clicked
            )
            lay.addWidget(btn)

    @QtCore.pyqtSlot()
    def on_clicked(self):
        btn = self.sender()
        ix = self.layout().indexOf(btn)
        new_btn = QtGui.QPushButton(
            "button {}".format(self.layout().count()),
            clicked=self.on_clicked
        )
        self.layout().insertWidget(ix+1, new_btn)

if __name__ == '__main__':
    import sys

    app = QtGui.QApplication.instance()
    if app is None:
        app = QtGui.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.