You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5如何将QListWidget点击项的数据传递到另一个.py文件?

解决PyQt5 QListWidget选中项数据传递到外部文件的错误问题

错误原因

你在B.py中直接调用Example().onClicked()时,没有传入item参数,这是因为onClicked是绑定itemDoubleClicked信号的槽函数——只有当用户双击列表项时,信号才会自动传入被点击的item对象。手动调用槽函数既不符合PyQt的信号槽机制,也无法正确传递数据。

解决方案1:使用自定义信号传递数据

修改A.py,定义自定义信号,当用户双击列表项时发射信号传递选中数据:

import sys
from PyQt5.QtWidgets import (QListWidget, QWidget, QVBoxLayout, QApplication)
from PyQt5.QtCore import pyqtSignal

class Example(QWidget):
    # 定义自定义信号,用于传递字符串类型的选中项文本
    item_selected = pyqtSignal(str)

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        vbox = QVBoxLayout(self)
        self.listWidget = QListWidget()
        self.listWidget.addItem("sparrow") 
        self.listWidget.addItem("robin")
        self.listWidget.addItem("crow")            
        self.listWidget.itemDoubleClicked.connect(self.onClicked)
        
        vbox.addWidget(self.listWidget)
        self.setLayout(vbox)
        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('QListWidget')
        self.show()

    def onClicked(self, item):
        selected_text = item.text()
        print(selected_text)
        # 发射自定义信号,传递选中的文本数据
        self.item_selected.emit(selected_text)

def main():
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

修改B.py,监听A类的自定义信号并处理数据:

import sys
from PyQt5.QtWidgets import QApplication
from A import Example

def handle_selected_data(text):
    # 在这里编写数据处理逻辑
    print(f"B.py收到选中项数据:{text}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    # 将自定义信号绑定到数据处理函数
    ex.item_selected.connect(handle_selected_data)
    sys.exit(app.exec_())

解决方案2:使用回调函数传递数据

修改A.py,初始化时接受一个回调函数,点击项时调用该函数传递数据:

import sys
from PyQt5.QtWidgets import (QListWidget, QWidget, QVBoxLayout, QApplication)

class Example(QWidget):
    def __init__(self, callback=None):
        super().__init__()
        self.callback = callback  # 保存外部传入的回调函数
        self.initUI()

    def initUI(self):
        vbox = QVBoxLayout(self)
        self.listWidget = QListWidget()
        self.listWidget.addItem("sparrow") 
        self.listWidget.addItem("robin")
        self.listWidget.addItem("crow")            
        self.listWidget.itemDoubleClicked.connect(self.onClicked)
        
        vbox.addWidget(self.listWidget)
        self.setLayout(vbox)
        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('QListWidget')
        self.show()

    def onClicked(self, item):
        selected_text = item.text()
        print(selected_text)
        # 如果存在回调函数,调用并传递数据
        if self.callback:
            self.callback(selected_text)

def main():
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

修改B.py,传入回调函数接收数据:

import sys
from PyQt5.QtWidgets import QApplication
from A import Example

def handle_data(text):
    # 在这里编写数据处理逻辑
    print(f"B.py获取到选中项数据:{text}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 初始化Example时传入回调函数
    ex = Example(callback=handle_data)
    sys.exit(app.exec_())

内容的提问来源于stack exchange,提问作者CHL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:54:28