<p>我不知道为什么当widget被设置时列表项不想改变它的状态。我想解决这个问题的方法可能是在小部件中添加一个复选框,或者连接到listwidget的<a href="http://doc.qt.nokia.com/latest/qlistwidget.html#itemClicked" rel="nofollow">itemClicked</a>信号并在那里重置项的状态。请看下面的一个例子是否对你有用:</p>
<pre><code>import sys
from PyQt4 import QtGui, QtCore
class MainForm(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainForm, self).__init__(parent)
listWidget = QtGui.QListWidget()
item = QtGui.QListWidgetItem()
item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
item.setCheckState(QtCore.Qt.Unchecked)
listWidget.addItem(item)
widget = QtGui.QCheckBox('test')
item.setSizeHint(widget.sizeHint())
listWidget.setItemWidget(item, widget)
listWidget.itemClicked.connect(self.on_listWidget_itemClicked)
self.setCentralWidget(listWidget)
def on_listWidget_itemClicked(self, item):
if item.listWidget().itemWidget(item) != None:
if item.checkState() == QtCore.Qt.Checked:
item.setCheckState(QtCore.Qt.Unchecked)
else:
item.setCheckState(QtCore.Qt.Checked)
def main():
app = QtGui.QApplication(sys.argv)
form = MainForm()
form.show()
app.exec_()
if __name__ == '__main__':
main()
</code></pre>
<p>希望这对你有帮助,谢谢</p>