Динамически вставьте флажки в tabWidget - PullRequest
1 голос
/ 01 июля 2019

Я строю небольшое приложение, используя pyQt5. До сих пор я создал пользовательский интерфейс с использованием QtCreator, преобразовал его в файл Python с помощью pyuic, и теперь одним нажатием кнопки он должен динамически заполнять вкладки tabWidget флажками, метки которых извлекаются из списка строк. Кажется, я не могу найти лучший способ решить эту проблему.

До сих пор я сделал следующее.

  1. Свяжите файл пользовательского интерфейса с моим основным кодом Python.
  2. Обработайте нажатие кнопки, чтобы вызвать функцию для вставки флажков.
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.auth_select.clicked.connect(self.handle_auth)
        self.show()
    def populate_tabs(self):
        self.tabWidget.addWidget(QtWidgets.QCheckBox())

Не могу понять, как динамически вставлять флажки в определенную вкладку. Допустим, моя вкладка называется main_tab; Я хочу вставить 5 флажков, чьи метки и идентификаторы взяты из 2 списков labels[] и ids[].

1 Ответ

0 голосов
/ 01 июля 2019

Хорошо, для тех, кто сталкивается с этим. Я пошел об этом, как описано ниже.

  1. Создание макета для размещения внутренних элементов
  2. Динамически вставлять QWidgets в этот макет
  3. Наконец, установите макет вкладки / виджета, который вам нужен, на вышеприведенное.

Небольшой пример [расширен сверху]

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.auth_select.clicked.connect(self.handle_auth)
        self.show()
        self.populate_tabs(connection_string)
    def populate_tabs(self, connection_string):
        layout = QGridLayout()
        for i in range(1, 5):
            for j in range(1, 10):  
                layout.addWidget(QCheckBox("Check #{}".format(i)) , i, j)

        self.tabWidget.widget(2).setLayout(layout)

...