def __init__(self, event_handler): super(MainForm, self).__init__(None) self.ui = Ui_mainForm() self.ui.setupUi(self) self._event_handler = event_handler self._result_model = QtGui.QStandardItemModel() self.ui.result_listview.setModel(self._result_model) QtCore.QObject.connect(self.ui.run_button, QtCore.SIGNAL("clicked()"), self._on_run_button_clicked) QtCore.QObject.connect(self.ui.cmd_edit, QtCore.SIGNAL("textChanged(QString)"), self._on_cmd_edit_textchanged) QtCore.QObject.connect(self.ui.cmd_edit, QtCore.SIGNAL('keyPressEvent(QKeyEvent)'), self._on_cmd_edit_keyPressEvent) QtCore.QObject.connect(self.ui.result_listview, QtCore.SIGNAL("doubleClicked(QModelIndex)"), self._on_result_listview_doubleclicked)
class MainForm(QtGui.QWidget): def __init__(self, event_handler): super(MainForm, self).__init__(None) self.ui = Ui_mainForm() self.ui.setupUi(self) self._event_handler = event_handler self._result_model = QtGui.QStandardItemModel() self.ui.result_listview.setModel(self._result_model) QtCore.QObject.connect(self.ui.run_button, QtCore.SIGNAL("clicked()"), self._on_run_button_clicked) QtCore.QObject.connect(self.ui.cmd_edit, QtCore.SIGNAL("textChanged(QString)"), self._on_cmd_edit_textchanged) QtCore.QObject.connect(self.ui.cmd_edit, QtCore.SIGNAL('keyPressEvent(QKeyEvent)'), self._on_cmd_edit_keyPressEvent) QtCore.QObject.connect(self.ui.result_listview, QtCore.SIGNAL("doubleClicked(QModelIndex)"), self._on_result_listview_doubleclicked) def getcmd(self): return unicode(self.ui.cmd_edit.text()).encode('utf-8') def showresult(self, itemlist): self._result_model.clear() for item in itemlist: standardItem = QtGui.QStandardItem(item.name.decode('utf-8')) standardItem.setEditable(False) standardItem.setData(item) self._result_model.appendRow(standardItem) if len(itemlist) > 0: #如果使用下面那种选中方式,会导致当按向下键时,listview会先选中第一个,好似下面那种方法的选中对listview无效似得。 keyEvent = QtGui.QKeyEvent(QtCore.QEvent.KeyPress, QtCore.Qt.Key_Down, QtCore.Qt.KeyboardModifiers()) self.ui.result_listview.keyPressEvent(keyEvent) #self.ui.result_listview.selectionModel().select(self._result_model.index(1, 0), QtGui.QItemSelectionModel.Select) def getselectitems(self): return [self._result_model.itemFromIndex(i).data().toPyObject() for i in self.ui.result_listview.selectedIndexes()] def getallitems(self): return [self._result_model.itemFromIndex(self._result_model.index(i, 0)).data().toPyObject() for i in xrange(0, self._result_model.rowCount())] def messagebox_notfound(self): return QtGui.QMessageBox.Yes == QtGui.QMessageBox.question(self, u'提示', u'没找到,是否添加?', QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) def keyPressEvent(self, keyEvent): super(MainForm, self).keyPressEvent(keyEvent) if keyEvent.nativeVirtualKey() == 13: #enter self._on_run_button_clicked() def show(self): super(MainForm, self).show() self.ui.cmd_edit.setFocus() def _on_run_button_clicked(self): self._event_handler.on_run() self.ui.cmd_edit.selectAll() self.ui.cmd_edit.setFocus() def _on_cmd_edit_textchanged(self, text): self._event_handler.on_search(unicode(text).encode('utf-8')) def _on_result_listview_doubleclicked(self, index): self._event_handler.on_run_item(self._result_model.itemFromIndex(index).data().toPyObject()) self.ui.cmd_edit.selectAll() self.ui.cmd_edit.setFocus() def _on_cmd_edit_keyPressEvent(self, keyEvent): if keyEvent.nativeVirtualKey() == 38: #up self.ui.result_listview.keyPressEvent(keyEvent) elif keyEvent.nativeVirtualKey() == 40: #down self.ui.result_listview.keyPressEvent(keyEvent)