0
我有一個UI.py文件,具有mainWindow類定義(使用Qt Designer和Pyside構建)。 UI導入主模塊。 在用戶界面我有一個列表框。基於左鍵或右鍵點擊某個項目,必須執行一個過程,例如leftMouseClicked和rightMouseClicked。 感謝您的幫助。抓住哪個鼠標按鈕上的項目
我有一個UI.py文件,具有mainWindow類定義(使用Qt Designer和Pyside構建)。 UI導入主模塊。 在用戶界面我有一個列表框。基於左鍵或右鍵點擊某個項目,必須執行一個過程,例如leftMouseClicked和rightMouseClicked。 感謝您的幫助。抓住哪個鼠標按鈕上的項目
您可以在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()
謝謝,但我用QAbstractListModel查看我的名單。這個小部件沒有itemClicked的信號。 clickedItem如何包含在QAbstractListModel中? – ArtDijk 2012-02-22 06:55:34
QAbstractListModel是模型,它必須連接到QAbstractItemView以在GUI中顯示它。 QAbstractItemView具有'clicked'信號。 – HYRY 2012-02-22 07:17:06
是的,但是點擊的信號是通過右鍵和左鍵點擊的,我想知道是否在視圖中的某個項目上按了左鍵或右鍵。感謝您的時間... – ArtDijk 2012-02-22 07:31:54