【问题标题】:Setting flags to make an item unselectable and later, selectable again设置标志以使项目不可选择,稍后再选择
【发布时间】:2018-05-27 05:26:39
【问题描述】:

我正在学习 PySide,我很困惑如何在第一次将 QListWidget 项设置为不可选择后将其设置回可选。我知道我可以:

QListWidget.SetFlags(QtCore.Qt.ItemIsSelectable)

当它似乎使项目无法选择时,我有点不确定为什么将标志命名为“ItemIsSelelectable”。但我想在设置此标志后将项目设置回可选。

【问题讨论】:

    标签: python pyside qlistwidget qlistwidgetitem


    【解决方案1】:

    如果你想激活一个项目的标志你必须使用操作符|:

    it.setFlags(it.flags() | Qt.ItemIsSelectable)
    

    如果你想停用它,你必须使用& ~:

    it.setFlags(it.flags() & ~Qt.ItemIsSelectable)
    

    例子:

    import sys
    from PySide.QtGui import QApplication, QWidget, QVBoxLayout, QListWidget, QPushButton
    from PySide.QtCore import Qt
    
    class Widget(QWidget):
        def __init__(self, parent=None):
            QWidget.__init__(self, parent)
            lay = QVBoxLayout(self)
            self.button = QPushButton("UnSelectable")
            self.listWidget = QListWidget()
    
            for i in range(10):
                self.listWidget.addItem("item {}".format(i))
    
            lay.addWidget(self.button)
            lay.addWidget(self.listWidget)
            self.button.clicked.connect(self.on_clicked)
    
        def on_clicked(self):
            if self.button.text() == "UnSelectable":
                self.button.setText("Selectable")
                for i in range(self.listWidget.count()):
                    it = self.listWidget.item(i)
                    it.setFlags(it.flags() & ~Qt.ItemIsSelectable)
            else:
                self.button.setText("UnSelectable")
                for i in range(self.listWidget.count()):
                    it = self.listWidget.item(i)
                    it.setFlags(it.flags() | Qt.ItemIsSelectable)
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        w = Widget()
        w.show()
        sys.exit(app.exec_())
    

    【讨论】:

    • 非常感谢。 Pyside 的这种语法是真的吗?我不认识 |和 & ~ 符号与 setFlags 方法一起使用。再次感谢您。
    • 这似乎工作得很好。我将标记为正确。
    猜你喜欢
    • 2022-06-15
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    相关资源
    最近更新 更多