0

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))
eyllanesc
  • 235,170
  • 19
  • 170
  • 241
  • use `item_2.clicked.connect(partial(self.open_qcolor_dialog, item_3, parameter))`, change to `def open_qcolor_dialog(self, button_clicked, x):` and remove `button_clicked = self.sender()` – eyllanesc Mar 09 '21 at 01:21
  • Please do not create new posts with the same content since if you do it repeatedly the system may block your ability to publish a post. You do not expect an answer in a few minutes (those are rare things) so you must be patient, here you can get answers in a few minutes, in hours, days, months or never – eyllanesc Mar 09 '21 at 01:29
  • i tried to edit the old post and it was closed , but i really appreciate your patience , i learned a lot from your posts , thanks again – Houssam Farag Mar 09 '21 at 01:31
  • I closed it as I closed the current post since it is a duplicate, you do not know how to implement the solution that is something else, probably in another post I will not tell you anything (or comment on something) so you will have to understand the solution of the duplicate and implement it, and if it still doesn't work then ask for feedback. Please read [ask] and check the [tour] – eyllanesc Mar 09 '21 at 01:37

0 Answers0