Чтение текстового значения из Qtablewidget и автоматическое присвоение Qcombobox - PullRequest
0 голосов
/ 03 января 2019

У меня есть QTableWidget и Qcombobox. Я хочу получить текстовые значения из каждой отдельной ячейки в первом столбце 1, и когда пользователь вставляет новое значение, это автоматически присваивает значение Qcombobox. Под каждой отдельной ячейкой я подразумеваю получение доступных значений, когда ячейка пуста, тогда ничего не делают

Визуализация:

enter image description here

from PyQt5 import QtCore, QtWidgets

class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.setLayout(QtWidgets.QVBoxLayout())
        combo = QtWidgets.QComboBox(self)
        self.layout().addWidget(combo)

class Window(QtWidgets.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.table = QtWidgets.QTableWidget(10, 2, self)
        self.comboBox = QtWidgets.QComboBox()
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.table)
        names = ['Name 1', 'Name 2', 'Name 3', 'Name 4', 'Name 5']
        for index, name in enumerate(names):
            self.table.setItem(index, 0, QtWidgets.QTableWidgetItem(name))

class Layout(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Layout, self).__init__()
        self.comb = Widget()
        self.table = Window()

        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.table)
        layout.addWidget(self.comb)

if __name__ == '__main__':

    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = Layout()
    window.setGeometry(600, 200, 300, 300)
    window.show()
    sys.exit(app.exec_())

Я не уверен насчет соединения, и решение для слотов даст хороший выбор?

1 Ответ

0 голосов
/ 03 января 2019

При этом лучше передать как модель, чтобы она автоматически обновлялась без ненужного использования сигналов.Но поскольку вы не хотите, чтобы пустые элементы отображались, используйте QSortFilterProxyModel с соответствующим регулярным выражением :

from PyQt5 import QtCore, QtWidgets

class Window(QtWidgets.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.table = QtWidgets.QTableWidget(10, 2)
        names = ['Name 1', 'Name 2', 'Name 3', 'Name 4', 'Name 5']
        for index, name in enumerate(names):
            self.table.setItem(index, 0, QtWidgets.QTableWidgetItem(name))

        proxy = QtCore.QSortFilterProxyModel(self)
        proxy.setSourceModel(self.table.model())
        proxy.setFilterRegExp(r"^(?!\s*$).+")

        self.comboBox = QtWidgets.QComboBox()
        self.comboBox.setModel(proxy)
        self.comboBox.setModelColumn(0)

        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.table)
        layout.addWidget(self.comboBox)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = Window()
    window.setGeometry(600, 200, 300, 300)
    window.show()
    sys.exit(app.exec_())
...