2016-10-09 12 views
1

QlistWidgetでは、listItem.setIcon(qIcon)を使用すると、アイコンがリスト項目の左側に置かれます。下に示すように、どうすれば右側に表示させることができますか?またPyQt:QListWidget項目の右側にアイコンを追加

enter image description here

別の質問。アイテムからアイコンを削除するにはどうすればよいですか?

答えて

1

これは、単純なカスタムアイテムデリゲートで非常に簡単に行うことができます。

class ItemDelegate(QtGui.QStyledItemDelegate): 
    def paint(self, painter, option, index): 
     option.decorationPosition = QtGui.QStyleOptionViewItem.Right 
     super(ItemDelegate, self).paint(painter, option, index) 

class MainWindow(QtGui.QMainWindow, Ui_MainWindow): 
    def __init__(self): 
     ... 
     self.delegate = ItemDelegate() 
     self.listWidget.setItemDelegate(self.delegate) 

だけヌルQIconに設定し、項目からアイコンを削除するには:

listItem.setIcon(QtGui.QIcon()) 
+0

魅力的な作品です!徹底的な答えをありがとう! – Yasin

1

このためには、必要に応じてアイテムデータを描画する独自のアイテムデリゲートを用意する必要があります。

QAbstractItemView::setItemDelegate()を参照してください。

QStyledItemDelegateを基本クラスとして使用し、paint()Qt::DecorationRole(アイコン)以外のすべての部分を処理し、自分自身を描画させることができます。

+0

私が参照してください。答えをありがとう。私はカスタムのデリゲートを作成していないので、PyQtでそれにアプローチする方法がわかりません。参照できるように見えますか? – Yasin

+0

私はPyQtを自分で使用していませんが、標準Pythonの構文をサブクラス化して、この 'def paint(self、painter、option、index):' –

+0

のような関数シグネチャでpaintメソッドを上書きすると思います。私は良い例を見つけました。 http://www.saltycrane.com/blog/2008/01/pyqt4-qitemdelegate-example-with/しかし、私のリストウィジェットはQtデザイナーで作成されているので、どのようにシームレスにデリゲート版! – Yasin

関連する問題