【发布时间】:2016-02-16 13:14:53
【问题描述】:
大家好。我正在 Windows 7 中使用 python3.4 和 PyQt5 制作简单的模型/视图应用程序。
首先,这是我的代码。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QListView
from PyQt5.Qt import QStandardItemModel, QStandardItem
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.list = QListView(self)
model = QStandardItemModel(self.list)
carMaker = ['Ford', 'GM', 'Renault', 'VW', 'Toyota']
for maker in carMaker:
item = QStandardItem(maker)
item.setCheckable(True)
model.appendRow(item)
self.list.setModel(model)
model.itemChanged.connect(self.on_item_changed)
#model.itemChanged.connect(functools.partial(self.on_item_changed, item, 1))
#model.itemChanged.connect(lambda: self.on_item_changed(item, 2))
self.list.setMinimumSize(300, 300)
self.setWindowTitle("Simple modelView")
self.show()
def on_item_changed(self, item):
print(item.text())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
这很好用。但我想用 'itemChanged' 信号添加额外的参数。所以,我使用了 lambda 和 functools
-
λ
- 从 'def on_item_changed(self, item)' 更改为 'def on_item_changed(self, item, num)'
- 从 'model.itemChanged.connect(self.on_item_changed)' 更改为 'model.itemChanged.connect(lambda: self.on_item_changed(item, 1))'
- 没有错误。但“item.text()”只显示“丰田”。 (可能是最后一个项目模型)
-
functools.partial
- 从 'def on_item_changed(self, item)' 更改为 'def on_item_changed(self, item, num)'
- 从 'model.itemChanged.connect(self.on_item_changed)' 更改为 'model.itemChanged.connect(functools.partial(self.on_item_changed, item, 1))'
- 没有错误。但“item.text()”只显示“丰田”。 (可能是最后一个项目模型)与 lambda 的结果相同。
问题是……
我不知道为什么 lambda 和 functools 显示错误的文本。
是否有任何有效的方法可以通过信号传递额外的参数?
感谢您阅读我的问题。
【问题讨论】:
标签: python-3.x pyqt pyqt4 pyqt5