PyQt5: изменение меток заголовка QTableWidget с использованием QLineEdit - PullRequest
0 голосов
/ 27 октября 2018

Итак, я создал таблицу в QtDesigner и хочу использовать QLineEdit.text () для именования его заголовков.

QLineEdit будет представлен квадратными скобками []. QPushButton будет представлен фигурными скобками {}.

Имя столбца: [placeholdertext] {Name}

Я использую QspinBox для индексов.

Теперь я хочу, чтобы give the user the possibility of naming all columns просто by typing [First_name, Last_name, Id_Number, ...], но i dont know how to name the headers ни как не использовать split вещь

Как я могу это сделать?

Обновление:

enter image description here

def NameHeaders(self):
    colpos = self.ColumnSpinBox.value()
    colname = self.nameColumnLineEdit.text()
    model = QtGui.QStandardItemModel()
    model.setVerticalHeaderLabels(colname, split(","))
    self.TableWidget.setModel(model)

это созданная мной функция, связанная с

"Name column/Row" Button

(пока он фокусируется только на именах столбцов, а не строк),

так что я хочу назвать столбцы, просто набрав в столбце QlineEdit что-то вроде: First_name, Last_name, Id_number, ...

и я хочу, чтобы код обнаруживал текст между запятыми и присваивал каждому тексту значение QSpinBox

Пример:

QSpinBoxValue: 2 || Column name : First_name, Last_name, id_number


On_Click 'Name Column/Row' Button: 


assign First_name to Header with index 0


assign Last_name to header with index 1


assign Id_Number to header with index 2

мой пример понятен?

1 Ответ

0 голосов
/ 27 октября 2018

Поскольку вы хотите обновить QSpinBox числом слов между запятыми, первым делом следует использовать сигнал textChanged QLineEdit, чтобы он уведомлял каждый раз при изменении текста, разделяйте слова, считайтеих и обновите QSpinBox.Чтобы установить текст в заголовках, вы должны использовать setHorizontalHeaderLabels(), но перед этим вы должны изменить количество столбцов, если это необходимо.

from PyQt5 import QtCore, QtWidgets


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        self.table_widget = QtWidgets.QTableWidget(4, 6)
        self.spinbox = QtWidgets.QSpinBox()
        self.le = QtWidgets.QLineEdit()
        self.le.textChanged.connect(self.on_textChanged)
        button = QtWidgets.QPushButton("Change")
        button.clicked.connect(self.on_clicked)

        lay = QtWidgets.QVBoxLayout(self)
        hlay = QtWidgets.QHBoxLayout()
        hlay.addWidget(self.spinbox)
        hlay.addWidget(self.le)
        hlay.addWidget(button)
        lay.addWidget(self.table_widget)
        lay.addLayout(hlay)

    @QtCore.pyqtSlot(str)
    def on_textChanged(self, text):
        words = text.split(",")
        n_words = len(words)
        self.spinbox.setValue(n_words)

    @QtCore.pyqtSlot()
    def on_clicked(self):
        words = self.le.text().split(",")
        n_words = len(words)
        if n_words > self.table_widget.columnCount():
            self.table_widget.setColumnCount(n_words)
        self.table_widget.setHorizontalHeaderLabels(words)


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())
...