簡體   English   中英

從另一個類中的 ListWidget 選擇返回值 - PyQt5

[英]Returning value from ListWidget Selection in another class - PyQt5

我正在編寫一個腳本,當用戶單擊一個按鈕時,將出現一個包含列表的彈出窗口。 當用戶雙擊該列表中的項目時,標簽將在原始窗口中填充選擇。 我的大部分代碼都可以正常工作,但是在將列表中的選定值返回到原始窗口時遇到了麻煩。 這是我到目前為止所做的代碼:

'''

class Main(QWidget):

    def __init__(self):
        super(Main, self).__init__()

        self.fgl = [] # Contains a list, left blank in the example
        self.tag = None

        self.BA = QPushButton("Phase A: ", self)
        self.BA.resize(60,25)
        self.BA.move(10,25)

        self.LA = QLabel("",self)
        self.LA.resize(100,25)
        self.LA.move(75,25)
        self.LA.setStyleSheet("border: 1px solid black;")

        self.BA.clicked.connect(self.tpuA)

    def tpuA(self):
        self.tag = Tag_PopUp()
        self.tag.build(self.fgl)
        self.tag.setGeometry(QRect(500, 300, 325, 200))
        self.tag.show()

    def updateText(self, item):
        self.LA.setText(item)


class Tag_PopUp(QWidget):

    def __init__(self):
        super(Tag_PopUp,self).__init__()
        self.listW = QListWidget(self)
        self.listW.itemDoubleClicked.connect(self.updateItem)

    def build(self, fgl):
        for i in fgl:
            QListWidgetItem(i, self.listW)

    def updateItem(self, item):
        x = item.text()
        #PopUp.updateText(x)
        return x

'''

關於我哪里出錯或我需要的最后幾行代碼有什么建議嗎? 如果您需要其他信息以幫助我,請告訴我

在您的 Tag_PopUp 上創建一個信號,當用戶單擊列表中的項目時發出該信號,並將其連接到您的 Main Widget 以更新標簽。 我在下面的代碼中做了注釋,我做了更改。

例如:

class Main(QWidget):

    def __init__(self):
        super(Main, self).__init__()

        self.fgl = [] # Contains a list, left blank in the example
        self.tag = None

        self.BA = QPushButton("Phase A: ", self)
        self.BA.resize(60,25)
        self.BA.move(10,25)

        self.LA = QLabel("",self)
        self.LA.resize(100,25)
        self.LA.move(75,25)
        self.LA.setStyleSheet("border: 1px solid black;")

        self.BA.clicked.connect(self.tpuA)

    def tpuA(self):
        self.tag = Tag_PopUp()
        self.tag.build(self.fgl)
        self.tag.setGeometry(QRect(500, 300, 325, 200))
        self.tag.itemUpdated.connect(self.updateText)  # added this
        self.tag.show()

    def updateText(self, item):
        self.LA.setText(item)


class Tag_PopUp(QWidget):

    itemUpdated = pyqtSignal([str])  # added this

    def __init__(self):
        super(Tag_PopUp,self).__init__()
        self.listW = QListWidget(self)
        self.listW.itemDoubleClicked.connect(self.updateItem)

    def build(self, fgl):
        for i in fgl:
            QListWidgetItem(i, self.listW)

    def updateItem(self, item):
        x = item.text()
        self.itemUpdated.emit(x)  # added this

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM