[PyQt] QTableWidget.cellClicked Does Not Work

Maurizio Berti maurizio.berti at gmail.com
Tue Apr 10 10:43:58 BST 2018


Well, it looks like there are some issues in your code.

First of all, you should avoid using ls and parsing its output to populate
your model. You can use QDir or directly QFileSystemModel.
You are connecting to cellClicked within updateUi, which is called only by
the updateUiCellClick (hence, the model is never updated, obviously).
And you are trying to connect it within a for cycle, which would eventually
result in the updateUiCellClick being called once for every cycle.

Also, your syntax in the signal connection is wrong.
You should use this, and only once:

self.filesTable.cellClicked.connect(self.updateUiCellClick)

Once that's set in the __init__, the signal is fired correctly (but the
script will give an error, since the method is incomplete and has other
issues).

Maurizio

2018-04-10 4:01 GMT+02:00 Python3 Lover <kenxshiba at gmail.com>:

> Hi,
>
> I am trying to make a simple files app (or, file explorer app) and I am
> using the QTableWidget to Display the files and directories. When the user
> clicks an directory, I want the program to jump to that directory. I have
> used the QTableWidget.cellClicked signal, and it does not currently work.
>
> The signal part:
> self.filesTable.connect(print)#self.updateUiCellClick)
> Added print instead of self.updateUiCellClick for debugging purposes.
>
> Code (probably you do not need this):
> #!/usr/bin/python3
>
> print('i Import Modules')
> print(' | Import sys')
> import sys
> print(' | Import PyQt5.QtCore')
> from PyQt5.QtCore import *
> print(' | Import PyQt5.QtGui')
> from PyQt5.QtGui import *
> print(' | Import PyQt5.QtWidgets')
> from PyQt5.QtWidgets import * # PyQt5 Support
> print(' | Import os')
> import os
> print(' | Import subprocess.Popen') # For backward-compatibility
> from subprocess import Popen, PIPE
> print(' | Done')
> print('i Define class Form')
>
> class root(QMainWindow):
>
>     def __init__(self, parent=None):
>         '''self.__init__ - Initializes QMainWindow'''
>         print('  self.__init__ - Initializes QMainWindow')
>         super(root, self).__init__(parent)
>
>         # Create Variables
>         self.currentPath = '/'
>         os.chdir(self.currentPath)
>         self.currentItems = os.listdir()
>         self.currentItemsLsProcess = Popen(['ls','-l'], stdout=PIPE,
> stderr=PIPE)
>         self.currentItemsLsProcessResult = self.currentItemsLsProcess.
> communicate()
>         if self.currentItemsLsProcessResult[1].decode('utf-8'):
>             QMessageBox.warning(self,'Files - ls -l Error','ls -l
> responded with non-blank stderr.Error is shown here:<br><code>{}</code><br><hr><br>Error
> LsStderr (e-lsstderr)<br><hr><br>If you want to support the team, go to the
> <a href="https://github.com/">GitHub Repository</a>.'.format(self.
> currentItemsLsProcessResult[1].decode('utf-8')))
>         self.currentItemsLs = self.currentItemsLsProcessResult[0]
> .decode('utf-8').split('\n')[1:-1]
>
>         # Create Table Widget
>         self.filesTable = QTableWidget()
>
>         # Init Table Widget
>         self.filesTable.clear()
>         self.filesTable.setSizeAdjustPolicy(QAbstractScrollArea.
> AdjustToContents)
>         self.filesTable.setRowCount(len(self.currentItems))
>         self.filesTable.setColumnCount(4)
>         self.filesTable.setHorizontalHeaderLabels(['Name','TimeStamp','Type','ls
> -l'])
>         # self.filesTable.setReadOnly(1)
>
>         # Create & Add Items
>         self.itemWidgets = [[],[],[],[]]
>         for i in range(len(self.currentItems)):
>             self.itemWidgets[0].append(QTableWidgetItem(self.
> currentItems[i]))
>             self.filesTable.setItem(i,0,self.itemWidgets[0][-1])
>             self.itemWidgets[3].append(QTableWidgetItem(self.
> currentItemsLs[i]))
>             self.filesTable.setItem(i,3,self.itemWidgets[3][-1])
>
>         # Init Widgets
>
>         # Align Widgets to root
>         self.setCentralWidget(self.filesTable)
>
>         # Signals-and-Slots
>
>         print('i Set self title')
>         self.setWindowTitle('{}'.format(self.currentPath))
>
>     def updateUi(self):
>         '''self.updateUi - None'''
>         os.chdir(self.currentPath)
>         self.currentItems = os.listdir()
>         self.currentItemsLsProcess = Popen(['ls','-l'], stdout=PIPE,
> stderr=PIPE)
>         self.currentItemsLsProcessResult = self.currentItemsLsProcess.
> communicate()
>         if self.currentItemsLsProcessResult[1].decode('utf-8'):
>             QMessageBox.warning(self,'Files - ls -l Error','ls -l
> responded with non-blank stderr.Error is shown here:<br><code>{}</code><br><hr><br>Error
> LsStderr (e-lsstderr)<br><hr><br>If you want to support the team, go to the
> <a href="https://github.com/">GitHub Repository</a>.'.format(self.
> currentItemsLsProcessResult[1].decode('utf-8')))
>         self.currentItemsLs = self.currentItemsLsProcessResult[0]
> .decode('utf-8').split('\n')[1:-1]
>         self.filesTable.clear()
>         self.filesTable.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.
> AdjustToContents)
>         self.filesTable.setRowCount(len(self.currentItems))
>         self.filesTable.setColumnCount(4)
>         self.filesTable.setHorizontalHeaderLabels(['Name','TimeStamp','Type','ls
> -l'])
>         self.itemWidgets = [[],[],[],[]]
>         for i in range(len(self.currentItems)):
>             self.itemWidgets[0].append(QTableWidgetItem(self.
> currentItems[i]))
>             self.filesTable.setItem(i,0,self.itemWidgets[0][-1])
>             self.filesTable..connect(print)#self.updateUiCellClick)
>             self.itemWidgets[3].append(QTableWidgetItem(self.
> currentItemsLs[i]))
>             self.filesTable.setItem(i,3,self.itemWidgets[3][-1])
>         self.filesTable.resizeColumnsToContents()
>         self.setWindowTitle('{}'.format(self.currentPath))
>
>     def updateUiCellClick(self, row, column):
>         '''self.updateUiCellClick - None'''
>         print('self.updateUiCellClick - None')
>         self.currentpath += self.itemWidgets[0][row].text+'/'
>         self.updateUi()
>
> print(' | Done')
>
> if __name__ == '__main__':
>     print('i Execute instance')
>     app = QApplication(sys.argv)
>     root = root()
>     root.show()
>     app.exec_()
>     print(' | Done')
>
> Any help would be appreciated,
> Ken
>
>
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> https://www.riverbankcomputing.com/mailman/listinfo/pyqt
>



-- 
È difficile avere una convinzione precisa quando si parla delle ragioni del
cuore. - "Sostiene Pereira", Antonio Tabucchi
http://www.jidesk.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20180410/f18be93d/attachment-0001.html>


More information about the PyQt mailing list