I am trying to make a refresh button in pyqt5. I am building a desktop app. I wrote the code that scans particular folder and saves filenames and their paths as an array.
Array values are added to QListWidget as items
self.sampleChoose_list.addItems(sample_directory[0])
I am trying to make a function that refreshes values of the array and passes it to QListWidget.
Something like this
self.refreshSamples.clicked.connect(self.refreshSample)
def refreshSample(self):
sample_directory = []
sample_files = []
for (dirpath, dirnames, filenames) in walk('./Samples'):
filenames = [f for f in filenames if not f[0] == '.']
sample_files.extend(filenames)
break
the_dir = "Samples"
paths = [os.path.abspath(os.path.join(the_dir,filename)) for filename in os.listdir(the_dir) if not filename.startswith('.')]
sample_directory.append(sample_files)
sample_directory.append(paths)
self.sampleChoose_list.addItems(sample_directory[0])
The problem that I struggle with is: when I push refresh button, new items get added, but the old ones are not deleted. How to remove items from QListWidget?
You may use this code to remove: QListWidgetItem *it = ui->listWidget->takeItem(ui->listWidget->currentRow()); delete it; Keep in mind that "takeItem" does not delete the object. Hi, friend, welcome devnet.
The QWidget widget is the base class of all user interface objects in PyQt5. We provide the default constructor for QWidget . The default constructor has no parent. A widget with no parent is called a window.
use QListWidget.clear()
and it
Removes all items and selections in the view.
for am more selective approuch you can use QListWidget.takeItem( index )
, it
Removes and returns the item from the given row in the list widget
Official Docs: clear()
Official Docs: takeItem()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With