使用箭头键在使用QListWidget时发送单击

时间:2016-06-17 23:54:05

标签: pyqt

我已经完成了在http://blog.rcnelson.com/building-a-matplotlib-gui-with-qt-designer-part-1/找到的优秀Matplotlib GUI教程。该程序使用QListWidget选择要显示的图。一切正常,但我有一个额外的需要。选择列表中的项目后,您可以使用箭头键选择下一个或上一个项目。下一个或上一个项目将突出显示。我想要的是一种触发点击触发的同一事件的方法。 click事件由以下代码处理:

self.mplfigs.itemClicked.connect(self.changefig)

我已尝试过以下操作,但都无效:

self.mplfigs.itemEntered.connect(self.changefig)
self.mplfigs.currentRowChanged.connect(self.changefig)

许多Google搜索都没有帮助,所以任何提示都非常受欢迎。

2 个答案:

答案 0 :(得分:0)

你可能需要使用itemSelectionChanged信号,在你的情况下self.mplfigs.itemSelectionChanged.connect(self.changefig)应该触发这个功能,我没有完整的代码但是应该有效,请看看here

添加一个最小的工作示例:

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

import sys

class myListWidget(QListWidget):

   def Clicked(self,item=None):
    if not item:
        item = self.currentItem()
    QMessageBox.information(self, "ListWidget", "You clicked: "+item.text())

def main():
   app = QApplication(sys.argv)
   listWidget = myListWidget()

   #Resize width and height
   listWidget.resize(300,120)

   listWidget.addItem("Item 1"); 
   listWidget.addItem("Item 2");
   listWidget.addItem("Item 3");
   listWidget.addItem("Item 4");

   listWidget.setWindowTitle('PyQT QListwidget Demo')
   listWidget.itemSelectionChanged.connect(listWidget.Clicked)

   listWidget.show()
   sys.exit(app.exec_())


if __name__ == '__main__':
   main()

原始代码来自here

答案 1 :(得分:0)

@Achayan非常接近我。这是解决问题的方法。使用以下行是建议的:

self.mplfigs.itemSelectionChanged.connect(self.changefig)

我需要更改changefig:

def changefig(self, item):
    text = item.text()
    self.rmmpl()
    self.addmpl(self.fig_dict[text])

要:

def changefig(self, item=None):
    if not item:
        item = self.mplfigs.currentItem()
    text = item.text()
    self.rmmpl()
    self.addmpl(self.fig_dict[text])

与itemClicked不同,itemSelectionChanged不会发出项目,因此需要额外的if语句来获取changefig中必需的特定项目。

但是,以下代码行似乎无需修改changefig即可。

self.mplfigs.currentItemChanged.connect(self.changefig)

显然,currentItemChanged会像itemClicked一样发出项目。