我已经完成了在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搜索都没有帮助,所以任何提示都非常受欢迎。
答案 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)
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一样发出项目。