【问题标题】:Change QTableWidget Header Labels using a QLineEdit使用 QLineEdit 更改 QTableWidget 标题标签
【发布时间】:2019-04-01 03:32:32
【问题描述】:

所以我在 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, ...]but i dont know how to name the headers 既不是如何使用 split 的东西

我怎样才能做到这一点?

更新:

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

我的例子清楚吗?

【问题讨论】:

  • 您可以更好地解释我,您的描述不清楚,可能带有您想要获得的图像的图像,并且您到目前为止拥有的代码我们会更好地理解您。
  • 好的,请稍等
  • 我已经编辑了我的代码!
  • 你用的是QTableView还是QTableWidget?
  • 没有 QTableWidget,顶部的 SpinBoxes 用于创建表格,一旦创建了 QTableWidget,那些 spinboxes 程序将禁用它们

标签: python pyqt pyqt5 qtablewidget


【解决方案1】:

当您想用逗号之间的单词数更新QSpinBox 时,第一件事是使用QLineEdittextChanged 信号,以便在每次更改文本时通知它,分隔单词,计数他们并更新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_())

【讨论】:

  • 但是如果我想命名行,我所要做的就是遵循相同的逻辑对吗?
  • @user10567350 是的,是一样的逻辑。
猜你喜欢
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 2017-04-22
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
相关资源
最近更新 更多