I want to get text in second QListWidget, but it will give me wrong row number.
I know how to get text in a QListWidget, just use
QListWidget.currentRow()
to get row number and
QListWidget.currentItem().text()
to get text
But the text in second QListWidget, the second QListWidget is in QStackedWidget connect to first QListWidget, the row will always print(-1) and can't print(currentItem().text()
So How can I do to get text in second QListWidget?
Example code is here:
import sys
from PyQt5.QtWidgets import *
from numpy.random import randint
# data
d = {i: [j for j in randint(100, size=10)] for i in randint(100, size=10)}
d_key = list(d.keys())
class MainTest(QMainWindow):
def __init__(self):
super().__init__()
mhbox = QHBoxLayout()
# create first QlistWidget = self.leftlist
self.leftlist = QListWidget()
self.Stack = QStackedWidget()
self.stack = {}
for i in range(len(d_key)):
self.leftlist.insertItem(i, f"{d_key[i]}") # create item with key in d
self.stack[i] = QWidget()
self.Stack.addWidget(self.stack[i])
self.stack_ui(i)
mhbox.addWidget(self.leftlist)
mhbox.addWidget(self.Stack)
self.leftlist.currentRowChanged.connect(self.Stack.setCurrentIndex)
widget = QWidget()
widget.setLayout(mhbox)
self.setCentralWidget(widget)
self.show()
def stack_ui(self, i):
list_in_key = d[d_key[i]] # get list in d[key]
self.leftlist_in_leftlist = QListWidget()
for n in range(len(list_in_key)):
self.leftlist_in_leftlist.insertItem(n, f"{list_in_key[n]}")
self.leftlist_in_leftlist.currentRowChanged.connect(self.get_name)
self.hbox_in_leftlist = QHBoxLayout()
self.hbox_in_leftlist.addWidget(self.leftlist_in_leftlist)
self.stack[i].setLayout(self.hbox_in_leftlist)
def get_name(self):
print(self.leftlist_in_leftlist.currentRow()) # always give me -1
# print(self.leftlist_in_leftlist.currentItem().text()) # can't not print, it's will get wrong.
if __name__ == '__main__':
app = QApplication(sys.argv)
m = MainTest()
sys.exit(app.exec_())