QListWidget 内のウィジェットを独自の ProductItemWidget クラスに設定して、リスト内の項目をさらにカスタマイズできるようにしています。これは正常に機能しますが、リストを自動的に並べ替えることができません。電話する
my_list.setSortingEnabled(True)
次に、この関数を上書きできるように特別に作成した、ProductListItem の "<" コンパレーターを上書きしようとしました。コンパレーターでは、比較される 2 つのアイテムに対応するウィジェットにアクセスし、それらの getText() 関数を呼び出します。ここでの問題は、__ lt __ 関数がデフォルトで 2 番目の引数を QListWidgetItem にキャストするため、コードでは自分自身の ProductListItem を取得しますが、otherItem の QListWidgetItem を取得することです。otherItem では、対応する ProductItemWidget にアクセスできません。これにアクセスする唯一の方法は、ProductListItem を QListWidget の itemWidget() 呼び出しに渡すことです。これが私のコードです:
class ProductListItem(QListWidgetItem):
def __init__(self, parent=None):
super(ProductListItem, self).__init__(parent)
def __lt__(self, otherItem):
this_item_widget = self.listWidget().itemWidget(self)
other_item_widget = otherItem.listWidget().itemWidget(otherItem)
return this_item_widget.getText() < other_item_widget.getText()
class ProductItemWidget(QWidget):
def __init__(self, product_name, parent=None):
super(ProductItemWidget, self).__init__(parent)
self.label = QLabel(product_name)
... setup code ...
def getText(self):
return self.label.text()
__ lt __ への呼び出しが otherItem を QListWidgetItem にキャストするのを防ぐ方法はありますか?
私はしばらくこの問題に悩まされてきたので、ヒントをいただければ幸いです。私は自分のアプローチ全体を変えたいと思っています。