I am trying to send extra parameter within a function connected to signal emitted from qtoolbutton placed in qtablewidget as cell widget I tried lambda: self.open_color_dialog(my_parameter) but it is not working
from PySide2 import QtCore
from PySide2.QtGui import QCursor
from PySide2.QtCore import Qt
from PySide2.QtWidgets import QTableWidgetItem
from untitled import *
import sys
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
myresult = []
logical_hor_headers, column_count
=self.get_table_logical_horizontal_headers(self.ui.tableWidget)
for each_column in range(column_count):
item_1 = QCheckBox()
item_1.setCheckState(Qt.Checked)
item_2 = QToolButton()
item_3 = QToolButton()
item_2.clicked.connect(self.open_qcolor_dialog)
myresult.append((item_1, logical_hor_headers[each_column], item_2,
item_3))
self.insert_into_tablewidget(myresult, self.ui.tableWidget)
def get_table_logical_horizontal_headers(self, table):
column_count = table.columnCount()
logical_hor_headers = []
for each_column in range(column_count):
header_name = table.horizontalHeaderItem(each_column).text()
logical_hor_headers.append(header_name)
return logical_hor_headers, column_count
def open_qcolor_dialog(self, x):
button_clicked = self.sender()
index = self.ui.tableWidget.indexAt(button_clicked.pos())
column_index = index.row()
new_color = QColorDialog().getColor()
new_color_hex = new_color.name()
print(x)
def insert_into_tablewidget(self, myresult, table):
table.horizontalHeader().setSectionsMovable(True)
table.setRowCount(len(myresult))
for row_number, row_data in enumerate(myresult):
for column_number, column_data in enumerate(row_data):
data_type = type(column_data)
if data_type is str:
item = QTableWidgetItem()
item.setData(QtCore.Qt.EditRole, str(column_data))
table.setItem(row_number, column_number, item)
else:
table.setCellWidget(row_number, column_number, column_data)
if __name__ == "__main__":
app = QApplication(sys.argv)
MainWindow = MainWindow()
MainWindow.show()
sys.exit(app.exec_())
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(413, 289)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.tableWidget = QTableWidget(self.centralwidget)
if (self.tableWidget.columnCount() < 5):
self.tableWidget.setColumnCount(5)
__qtablewidgetitem = QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, __qtablewidgetitem)
__qtablewidgetitem1 = QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, __qtablewidgetitem1)
__qtablewidgetitem2 = QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(2, __qtablewidgetitem2)
__qtablewidgetitem3 = QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(3, __qtablewidgetitem3)
__qtablewidgetitem4 = QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(4, __qtablewidgetitem4)
self.tableWidget.setObjectName(u"tableWidget")
self.tableWidget.setGeometry(QRect(5, 1, 401, 261))
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QStatusBar(MainWindow)
self.statusbar.setObjectName(u"statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow",
u"MainWindow", None))
___qtablewidgetitem = self.tableWidget.horizontalHeaderItem(0)
___qtablewidgetitem.setText(QCoreApplication.translate("MainWindow",
u"New Column", None));
___qtablewidgetitem1 = self.tableWidget.horizontalHeaderItem(1)
___qtablewidgetitem1.setText(QCoreApplication.translate("MainWindow",
u"aa", None));
___qtablewidgetitem2 = self.tableWidget.horizontalHeaderItem(2)
___qtablewidgetitem2.setText(QCoreApplication.translate("MainWindow",
u"ff", None));
___qtablewidgetitem3 = self.tableWidget.horizontalHeaderItem(3)
___qtablewidgetitem3.setText(QCoreApplication.translate("MainWindow",
u"gg", None));
___qtablewidgetitem4 = self.tableWidget.horizontalHeaderItem(4)
___qtablewidgetitem4.setText(QCoreApplication.translate("MainWindow",
u"vv", None))