I recently switched to mac and my pyqt5 application isnt running like it should. I have a table set up with checkboxes in the rows. On a pc, when you click on a checkbox it first updates the row, then hits the checkbox. on mac it just hits the checkbox without triggering a row change. I'm cant even figure out what row i'm on to make any changes.
here is basic code that would work on a pc, but always outputs "0, 3" on a mac:
for i in range(4):
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(i, item)
item.setText(_translate("MainWindow", str(i)))
self.tableWidget.setCellWidget(i, 0, QtWidgets.QCheckBox())
self.tableWidget.cellWidget(i, 0).clicked.connect(lambda: print(self.tableWidget.currentRow(), i))
Here is the full file if you would like to test this yourself:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget.setGeometry(QtCore.QRect(195, 101, 371, 321))
self.tableWidget.setObjectName("tableWidget")
MainWindow.setCentralWidget(self.centralwidget)
self.tableWidget.setColumnCount(1)
self.tableWidget.setRowCount(4)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "Value"))
for i in range(4):
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(i, item)
item.setText(_translate("MainWindow", str(i)))
self.tableWidget.setCellWidget(i, 0, QtWidgets.QCheckBox())
self.tableWidget.cellWidget(i, 0).clicked.connect(lambda: print(self.tableWidget.currentRow(), i))
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())