簡體   English   中英

如何從QListWidget獲取當前選定的項目,而不是它記得的內容

[英]How to get currently selected item from QListWidget and not what it remembers

QListWidget返回.selectedItems()即使當前沒有選擇任何項(它會記住上一次單擊或選中的項。因此,即使取消選擇了所有項,它仍會返回其記住的內容)。 但是我需要QListWidget返回僅當前選中的那個項目。

.hasFocus()技巧不可靠,因為所有項目都可能被隱藏,QListWidget將成為焦點。 但是在什么都沒有選擇的情況下,它仍然可以繼續並返回一個項目。

我不確定為什么您不認為.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_())

選擇的所有內容:

列表中的所有項目均已選中

沒有選擇:

列表中未選擇任何項目

我最終使用了這種方法:

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_())

暫無
暫無

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

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