QListWidget
会在.selectedItems()
上返回,即使当前没有选中任何项目(它会记住最后一项被点击或选中。所以即使取消选中所有项目,它仍然会返回它记得的内容)。但我需要QListWidget
仅返回当前选中的项目。
.hasFocus()
技巧不可靠,因为所有项目都可能被隐藏,QListWidget将成为焦点。但它仍然会继续并返回一个项目,而没有选择任何东西。
答案 0 :(得分:2)
我不确定你为什么不认为.selectedItems()
不起作用。我只是尝试使用下面的代码并且它正常工作。
import sys
from PySide import QtGui
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super().__init__()
self.resize(720, 480)
central_widget = QtGui.QWidget(self)
self.setCentralWidget(central_widget)
layout = QtGui.QHBoxLayout(central_widget)
self.text_edit = QtGui.QTextEdit(central_widget)
layout.addWidget(self.text_edit)
self.drop_list = QtGui.QListWidget(central_widget)
self.drop_list.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
self.drop_list.addItems(['one', 'two', 'three', 'four'])
self.drop_list.itemSelectionChanged.connect(self.show_List)
layout.addWidget(self.drop_list)
statusbar = QtGui.QStatusBar(self)
self.setStatusBar(statusbar)
action_ShowList = QtGui.QAction(self)
action_ShowList.triggered.connect(self.show_List)
self.show()
def show_List(self):
self.text_edit.setText(repr(self.drop_list.selectedItems()))
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
frame = MainWindow()
sys.exit(app.exec_())
所有选择的内容:
没有选择:
答案 1 :(得分:0)
我最终使用了这种方法:
def getSelectedItem(self):
if not self.myTreeWidget.hasFocus(): return
for selectedItem in self.myTreeWidget.selectedItems():
if not selectedItem: continue
if selectedItem.isHidden(): continue
return selectedItem
这是他的代码(已编辑),显示了我提到过的问题。
首先选择一个项目,然后通过点击'隐藏 - 取消隐藏'隐藏所有项目。按钮。单击现在为空的listView内的任何位置(只是为了确保取消选中所有内容)。点击"打印所选"按钮。这是结果的图像:
from PyQt4 import QtCore, QtGui
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.resize(720, 480)
central_widget = QtGui.QWidget(self)
self.setCentralWidget(central_widget)
layout = QtGui.QHBoxLayout(central_widget)
self.text_edit = QtGui.QTextEdit(central_widget)
layout.addWidget(self.text_edit)
self.drop_list = QtGui.QListWidget(central_widget)
self.drop_list.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
self.drop_list.addItems(['one', 'two', 'three', 'four'])
layout.addWidget(self.drop_list)
self.show()
self.button1=QtGui.QPushButton("Hide-Unhide Items")
self.button1.clicked.connect(self.hideUnhideItems)
layout.addWidget(self.button1)
self.button2=QtGui.QPushButton("Print Selected")
self.button2.clicked.connect(self.getSelected)
layout.addWidget(self.button2)
def getSelected(self):
self.text_edit.clear()
self.text_edit.setText(repr(self.drop_list.selectedItems()))
def hideUnhideItems(self):
for i in range(self.drop_list.count()):
item=self.drop_list.item(i)
if not item.isHidden():
item.setHidden(True)
else:
item.setHidden(False)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
frame = MainWindow()
sys.exit(app.exec_())