2012-02-16 13 views
0

mainWindowクラス定義(Qt DesignerとPysideでビルド)を持つUI.pyファイルがあります。 UIはメインモジュールにインポートされます。 Uiにはリストボックスがあります。アイテム上でクリックされた左または右のマウスに基づいて、手続きが実行されなければならない(例えば、leftMouseClickedおよびrightMouseClicked)。 ご協力いただきありがとうございます。mouse buttonが押されたアイテムを取得する

答えて

1

マウスプレスイベントを処理するために、QListWidgetサブクラスでmousePressEvent()メソッドを定義できます。イベントパラメータでクリックされたボタンを取得し、属性に保存します。

from PyQt4.QtGui import * 
from PyQt4.QtCore import * 

class MyListWidget(QListWidget): 
    def __init__(self, parent=None): 
     super(MyListWidget, self).__init__(parent) 
     self.itemClicked.connect(self.on_item_clicked) 

    def mousePressEvent(self, event): 
     self._mouse_button = event.button() 
     super(MyListWidget, self).mousePressEvent(event) 

    def on_item_clicked(self, item): 
     print item.text(), self._mouse_button 

class Frame(QWidget): 
    def __init__(self, parent=None): 
     super(Frame, self).__init__(parent)  
     self.item_ctrl = items = MyListWidget(self)  
     self.item_ctrl.addItem("Item1") 
     self.item_ctrl.addItem("Item2") 
     box = QVBoxLayout() 
     box.addWidget(self.item_ctrl) 
     self.setLayout(box) 

if __name__ == "__main__": 
    import sys  
    app = QApplication(sys.argv) 
    main = Frame() 
    main.show() 
    sys.exit(app.exec_()) 

編集:QListViewを使用する場合:

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

def main(): 
    app = QApplication(sys.argv) 
    w = MyWindow() 
    w.show() 
    sys.exit(app.exec_()) 

class MyWindow(QWidget): 
    def __init__(self, *args): 
     QWidget.__init__(self, *args) 

     # create table 
     list_data = [1,2,3,4] 
     lm = MyListModel(list_data, self) 
     lv = MyListView() 
     lv.setModel(lm) 
     lv.clicked.connect(self.item_clicked) 
     self.lv = lv 

     # layout 
     layout = QVBoxLayout() 
     layout.addWidget(lv) 
     self.setLayout(layout) 

    def item_clicked(self, index): 
     print "row=", index.row(), "button=", self.lv._mouse_button 

class MyListView(QListView): 
    def mousePressEvent(self, event): 
     self._mouse_button = event.button() 
     super(MyListView, self).mousePressEvent(event) 

class MyListModel(QAbstractListModel): 
    def __init__(self, datain, parent=None, *args): 
     """ datain: a list where each item is a row 
     """ 
     QAbstractListModel.__init__(self, parent, *args) 
     self.listdata = datain 

    def rowCount(self, parent=QModelIndex()): 
     return len(self.listdata) 

    def data(self, index, role): 
     if index.isValid() and role == Qt.DisplayRole: 
      return QVariant(self.listdata[index.row()]) 
     else: 
      return QVariant() 

if __name__ == "__main__": 
    main() 
+0

おかげで、私は私のリストを表示するQAbstractListModelを使用しています。このウィジェットにはitemClickedというシグナルはありません。 clickedItemをQAbstractListModelに含めるにはどうすればよいですか? – ArtDijk

+0

QAbstractListModelはモデルであり、QAbstractItemViewに接続してGUIに表示する必要があります。 QAbstractItemViewには、「クリックされた」信号があります。 – HYRY

+0

はい、クリックされた信号は右クリックと左クリックで起動され、ビュー内の項目で左キーか右キーが押されたかどうかを知りたいとします。ありがとうございました... – ArtDijk

関連する問題