Hello World / plɹoM ollǝH

Programmers Live in Vain

QListWidget 文字列フィルタリングしてみる

文字列でフィルタリングできるリストビューがあれば

人生の複雑な状況も整理できるかもしれない

f:id:dungeonneko:20160206230506g:plain

# conding: utf-8
import sys
from PySide.QtCore import *
from PySide.QtGui import *

class MyListWidget(QWidget):
    def __init__(self, data, parent=None):
        super().__init__(parent)
        layout = QVBoxLayout()
        self.__filter = QLineEdit()
        self.__lsview = QListWidget()

        self.setLayout(layout)
        layout.addWidget(self.__filter)
        layout.addWidget(self.__lsview)

        self.__filter.textChanged.connect(self.__refresh)
        self.__data = data
        self.__refresh()

    def __refresh(self):
        self.__lsview.clear()

        # 文字列でフィルタリング
        s = self.__filter.text()
        for d in self.__data:
            if len(s) > 0 and s not in d:
                continue
            self.__lsview.addItem(QListWidgetItem(d))

# entry point
if __name__ == '__main__':
    myapp = QApplication(sys.argv)
    widget = QWidget()
    layout = QHBoxLayout(widget)

    # ややこしいデータを挿入する
    mylist = MyListWidget((
        '俺がお前でお前が俺で嫁は関係ない',
        '俺は俺でお前はお前で嫁は嫁だからあんまり関係ない',
        'お前のものは俺のもので俺のものは嫁のもの',
        '俺もお前でお前も俺で嫁は関係ない',
        '俺もお前もあいつもこいつも嫁も関係ない',
        '俺とお前が嫁で嫁は実は婿だった訳だ',
        'お前の嫁が俺の嫁なわけがない',
        'えっ?俺がお前の嫁なの?'))

    widget.setLayout(layout)
    layout.addWidget(mylist)
    widget.show()
    sys.exit(myapp.exec_())

駄目でした