我需要一个按钮,它将添加带有一些小部件的新行。每次单击按钮-每次新行都附加新的小部件。在GridLayout中,我只能使用.addWidget(customRow,customColumn)。但是在QTableView和QTableWidget中没有这样的方法,只有.setItem(row,column)。如果我只是更改行和列,它将处于该位置,但将从过去的位置消失。我有一些示例代码(可在互联网上找到)
class MainWindow(QMainWindow):
# Переопределяем конструктор класса
def __init__(self):
# Обязательно нужно вызвать метод супер класса
QMainWindow.__init__(self)
self.setMinimumSize(QSize(480, 80)) # Устанавливаем размеры
self.setWindowTitle("Работа с QTableWidget") # Устанавливаем заголовок окна
central_widget = QWidget(self) # Создаём центральный виджет
self.setCentralWidget(central_widget) # Устанавливаем центральный виджет
grid_layout = QGridLayout() # Создаём QGridLayout
central_widget.setLayout(grid_layout) # Устанавливаем данное размещение в центральный виджет
table = QTableWidget(self) # Создаём таблицу
table.setColumnCount(3) # Устанавливаем три колонки
table.setRowCount(1) # и одну строку в таблице
# Устанавливаем заголовки таблицы
table.setHorizontalHeaderLabels(["Header 1", "Header 2", "Header 3"])
# Устанавливаем всплывающие подсказки на заголовки
table.horizontalHeaderItem(0).setToolTip("Column 1 ")
table.horizontalHeaderItem(1).setToolTip("Column 2 ")
table.horizontalHeaderItem(2).setToolTip("Column 3 ")
# Устанавливаем выравнивание на заголовки
table.horizontalHeaderItem(0).setTextAlignment(Qt.AlignLeft)
table.horizontalHeaderItem(1).setTextAlignment(Qt.AlignHCenter)
table.horizontalHeaderItem(2).setTextAlignment(Qt.AlignRight)
# заполняем первую строку
table.setItem(0, 0, QTableWidgetItem("Text in column 1"))
table.setItem(0, 1, QTableWidgetItem("Text in column 2"))
table.setItem(0, 2, QTableWidgetItem("Text in column 3"))
game = QTextEdit()
# делаем ресайз колонок по содержимому
table.resizeColumnsToContents()
grid_layout.addWidget(table, 0, 0) # Добавляем таблицу в сетку
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec())
有一些QTextEdit'game'。例如,我需要向所有列添加一个it小部件。怎么做?
建议的@musicamante可能看起来像这样:
from PyQt5.Qt import *
class MainWindow(QMainWindow):
# Переопределяем конструктор класса
def __init__(self):
# Обязательно нужно вызвать метод супер класса
QMainWindow.__init__(self)
self.setMinimumSize(QSize(480, 80)) # Устанавливаем размеры
self.setWindowTitle("Работа с QTableWidget") # Устанавливаем заголовок окна
central_widget = QWidget(self) # Создаём центральный виджет
self.setCentralWidget(central_widget) # Устанавливаем центральный виджет
grid_layout = QGridLayout() # Создаём QGridLayout
central_widget.setLayout(grid_layout) # Устанавливаем данное размещение в центральный виджет
self.table = QTableWidget(self) # Создаём таблицу
self.table.setColumnCount(3) # Устанавливаем три колонки
self.table.setRowCount(1) # и одну строку в таблице
# Устанавливаем заголовки таблицы
self.table.setHorizontalHeaderLabels(["Header 1", "Header 2", "Header 3"])
# Устанавливаем всплывающие подсказки на заголовки
self.table.horizontalHeaderItem(0).setToolTip("Column 1 ")
self.table.horizontalHeaderItem(1).setToolTip("Column 2 ")
self.table.horizontalHeaderItem(2).setToolTip("Column 3 ")
# Устанавливаем выравнивание на заголовки
self.table.horizontalHeaderItem(0).setTextAlignment(Qt.AlignLeft)
self.table.horizontalHeaderItem(1).setTextAlignment(Qt.AlignHCenter)
self.table.horizontalHeaderItem(2).setTextAlignment(Qt.AlignRight)
# заполняем первую строку
self.table.setItem(0, 0, QTableWidgetItem("Text in column 1"))
self.table.setItem(0, 1, QTableWidgetItem("Text in column 2"))
self.table.setItem(0, 2, QTableWidgetItem("Text in column 3"))
game = QTextEdit()
# делаем ресайз колонок по содержимому
self.table.resizeColumnsToContents()
grid_layout.addWidget(self.table, 0, 0) # Добавляем таблицу в сетку
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
button = QPushButton('Add')
button.clicked.connect(self.onClicked)
grid_layout.addWidget(button, 0, 1)
def onClicked(self):
rowPosition = self.table.rowCount()
self.table.insertRow(rowPosition)
for i in range(3):
self.table.setCellWidget(rowPosition, i, QTextEdit())
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec())