PyQT5 как узнать индекс позиции виджета, который находится на лейауте?
У меня есть QFrame с разметкой QHBoxLayout, на котором расположено 6 кнопок QPushButton.
Есть ли возможность получить позицию (индекс) конкретной кнопки на QHBoxLayout непосредственно из самой кнопки?
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Пожалуйста, всегда предоставляйте минимально-воспроизводимый пример, который демонстрирует проблему.
int QLayout::indexOf(const QWidget *
widget) constИщет виджет
widgetв этом макете (не включая дочерние макеты).Возвращает индекс виджета или -1, если виджет не найден.
import sys
from PyQt5.Qt import *
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.frame_1 = QFrame()
self.frame_2 = QFrame()
self.layout_main = QVBoxLayout(self)
self.layout_main.addWidget(self.frame_1, 1)
self.layout_main.addWidget(self.frame_2,
alignment=Qt.AlignHCenter | Qt.AlignBottom)
self.label = QLabel(alignment=Qt.AlignCenter)
self.layout_1 = QHBoxLayout(self.frame_1)
self.layout_1.addWidget(self.label)
self.layout_2 = QHBoxLayout(self.frame_2)
for i in range(5):
btn = QPushButton(
'Button {}'.format(i),
clicked=self.on_clicked
)
self.layout_2.addWidget(btn)
@pyqtSlot()
def on_clicked(self):
btn = self.sender()
ix = self.layout_2.indexOf(btn)
text = f'{btn.text()}: индекс = {ix}'
self.label.setText(text)
new_btn = QPushButton(
"button {}".format(self.layout_2.count()),
clicked=self.on_clicked
)
self.layout_2.insertWidget(ix+1, new_btn)
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setFont(QFont("Times", 12, QFont.Bold))
w = MainWindow()
w.resize(700, 500)
w.show()
sys.exit(app.exec_())
