使用 QLineEdit 更改 QTableWidget Header 标签
Change QTableWidget Header Labels using a QLineEdit
所以我在 QtDesigner 中制作了一个 Table 并且我想使用 QLineEdit.text() 来命名它的 headers.
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
东西
我怎样才能做到这一点?
更新:
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
我的例子清楚吗?
当你想用逗号之间的单词数更新 QSpinBox
时,第一件事是使用 QLineEdit
的 textChanged
信号,这样它每次都会通知该文本被改变,分开单词,统计它们并更新QSpinBox
。要在 headers 中设置文本,您必须使用 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_())
所以我在 QtDesigner 中制作了一个 Table 并且我想使用 QLineEdit.text() 来命名它的 headers.
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
东西
我怎样才能做到这一点?
更新:
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
我的例子清楚吗?
当你想用逗号之间的单词数更新 QSpinBox
时,第一件事是使用 QLineEdit
的 textChanged
信号,这样它每次都会通知该文本被改变,分开单词,统计它们并更新QSpinBox
。要在 headers 中设置文本,您必须使用 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_())