how to get text in second QListWidget, the second QListWidget is in QStackedWidget connect to first QListWidget

41 Views Asked by At

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_())
0

There are 0 best solutions below