Browse Source

Use arrow key to select label from list in QLineEdit

Kentaro Wada 7 năm trước cách đây
mục cha
commit
207411d541
1 tập tin đã thay đổi với 15 bổ sung1 xóa
  1. 15 1
      labelme/labelDialog.py

+ 15 - 1
labelme/labelDialog.py

@@ -34,12 +34,25 @@ from .lib import newIcon, labelValidator
 
 BB = QDialogButtonBox
 
+
+class LabelQLineEdit(QLineEdit):
+
+    def setListWidget(self, list_widget):
+        self.list_widget = list_widget
+
+    def keyPressEvent(self, e):
+        if e.key() in [Qt.Key_Up, Qt.Key_Down]:
+            self.list_widget.keyPressEvent(e)
+        else:
+            super(LabelQLineEdit, self).keyPressEvent(e)
+
+
 class LabelDialog(QDialog):
 
     def __init__(self, text="Enter object label", parent=None, labels=None,
                  sort_labels=True):
         super(LabelDialog, self).__init__(parent)
-        self.edit = QLineEdit()
+        self.edit = LabelQLineEdit()
         self.edit.setPlaceholderText(text)
         self.edit.setValidator(labelValidator())
         self.edit.editingFinished.connect(self.postProcess)
@@ -62,6 +75,7 @@ class LabelDialog(QDialog):
         else:
             self.labelList.setDragDropMode(QAbstractItemView.InternalMove)
         self.labelList.currentItemChanged.connect(self.labelSelected)
+        self.edit.setListWidget(self.labelList)
         layout.addWidget(self.labelList)
         self.setLayout(layout)
         # completion