Как динамический добавить кнопки в QTableWidget
Подскажите как добавить рекурсивно кнопки в QTableWidget?
Программа берез из списка rows IP и номера. Хотелось бы прикрутить кнопки в таком же количестве что и первые 2 стобца. Спасибо!
from PyQt5.QtWidgets import QTableWidgetItem
from GUI import *
import sys
import psycopg2
class Widget(Qt.QWidget):
def __init__(self):
super().__init__()
class mywindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.connect)
self.ui.lineEdit.setText('')
def connect(self):
num = self.ui.lineEdit.text()
self.statusBar().showMessage('')
if len(num) < 4:
pass
self.statusBar().showMessage(f'Номер состоит из 4х цифр, ты ввел меньше')
self.show()
elif len(num) > 4:
pass
self.statusBar().showMessage(f'Номер состоит из 4х цифр, ты ввел больше')
self.show()
elif num.isdigit() == False:
pass
self.statusBar().showMessage(f'Достустимо вводить только цифры, номер состоит из 4х цифр')
self.show()
else:
rows = [('10.16.26.25', 2), ('10.16.26.26', 3), ('10.16.26.27', 1), ('10.16.26.28', 4)]
for row in rows:
pass
print(rows)
## rows.sort()
for i,entry in enumerate(rows):
self.ui.tableWidget.setRowCount(i+1)
self.ui.tableWidget.setColumnCount(4)
self.ui.tableWidget.setSortingEnabled(True)
self.ui.tableWidget.sortItems(0-3)
row = 0
for tup in rows:
col = 0
for item in tup:
cellinfo = QTableWidgetItem(item)
cellinfo.setFlags(
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled
)
self.ui.tableWidget.setItem(row, col, cellinfo)
col += 1
row += 1
number = 0
for x in rows:
col = 1
for item in str(x[1]):
cellinfo = QTableWidgetItem(item)
cellinfo.setFlags(
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled
)
self.ui.tableWidget.setItem(number, col, cellinfo)
col += 1
number += 1
def addButton(self, row, column):
self.setCellWidget(row, column + 1, self.button)
app = QtWidgets.QApplication([])
win = mywindow()
win.show()
sys.exit(app.exec())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
void QTableWidget::
setCellWidget(int row, int column, QWidget *widget)Устанавливает данный виджет для отображения в ячейке в данной строке и столбце, передавая владение виджетом таблице.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#from PyQt5.Qt import *
# ? from GUI import *
# ? import psycopg2
# ? class Widget(QWidget):
# ? def __init__(self):
# ? super().__init__()
class MyWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
'''
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.connect)
self.ui.lineEdit.setText('')
'''
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
self.rows = [
('10.16.26.25', 2),
('10.16.26.26', 3),
('10.16.26.27', 1),
('10.16.26.28', 4)
]
self.lineEdit = QtWidgets.QLineEdit(placeholderText='Введите номер из 4х цифр')
self.pushButton = QtWidgets.QPushButton('Создать TableWidget')
self.pushButton.clicked.connect(self.func_connect)
self.tableWidget = QtWidgets.QTableWidget(0, 4)
self.tableWidget.setHorizontalHeaderLabels(
['IP', 'Number', 'SSH', 'VNC'])
self.tableWidget.horizontalHeader().setDefaultSectionSize(150)
self.layout = QtWidgets.QGridLayout(self.centralwidget)
self.layout.addWidget(self.tableWidget)
self.layout.addWidget(self.lineEdit)
self.layout.addWidget(self.pushButton)
self.statusBar().showMessage('Message in statusbar. '
'Будет Скрыто через 5000 миллисекунд - 5 секунды! ', 5000)
def func_connect(self):
num = self.lineEdit.text()
if not num.isdigit():
self.statusBar().showMessage(
'Достустимо вводить только цифры, номер состоит из 4х цифр')
return
if len(num) != 4 :
self.statusBar().showMessage('Номер состоит из 4х цифр, повторите ввод.')
return
self.statusBar().showMessage('')
self.tableWidget.setRowCount(len(self.rows))
for row, items in enumerate(self.rows):
self.tableWidget.setItem(row, 0, QtWidgets.QTableWidgetItem(items[0]))
self.tableWidget.setItem(row, 1, QtWidgets.QTableWidgetItem(str(items[1])))
button = QtWidgets.QPushButton(f'SSH {row}')
button.clicked.connect(lambda ch, ip=items[0], n=items[1], btn=button: \
self.button_pushed_SSH(ip, n, btn))
self.tableWidget.setCellWidget(row, 2, button)
button = QtWidgets.QPushButton(f'VNC {row}')
button.clicked.connect(lambda ch, ip=items[0], n=items[1], btn=button: \
self.button_pushed_VNC(ip, n, btn))
self.tableWidget.setCellWidget(row, 3, button)
self.tableWidget.setSortingEnabled(True)
def button_pushed_SSH(self, ip, n, btn):
print(f'{btn.text()}: ip={ip}, n={n}')
def button_pushed_VNC(self, ip, n, btn):
print(f'{btn.text()}: ip={ip}, n={n}')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
app.setFont(QtGui.QFont("Times", 12, QtGui.QFont.Bold))
win = MyWindow()
win.resize(640, 480)
win.show()
sys.exit(app.exec_())

