def __init__(self, text="Enter object label", parent=None, labels=None, sort_labels=True, show_text_field=True, completion='startswith'): super(LabelDialog, self).__init__(parent) self.edit = LabelQLineEdit() self.edit.setPlaceholderText(text) self.edit.setValidator(labelme.utils.labelValidator()) self.edit.editingFinished.connect(self.postProcess) layout = QtWidgets.QVBoxLayout() if show_text_field: layout.addWidget(self.edit) # buttons self.buttonBox = bb = QtWidgets.QDialogButtonBox( QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel, QtCore.Qt.Horizontal, self, ) bb.button(bb.Ok).setIcon(labelme.utils.newIcon('done')) bb.button(bb.Cancel).setIcon(labelme.utils.newIcon('undo')) bb.accepted.connect(self.validate) bb.rejected.connect(self.reject) layout.addWidget(bb) # label_list self.labelList = QtWidgets.QListWidget() self._sort_labels = sort_labels if labels: self.labelList.addItems(labels) if self._sort_labels: self.labelList.sortItems() else: self.labelList.setDragDropMode( QtGui.QAbstractItemView.InternalMove) self.labelList.currentItemChanged.connect(self.labelSelected) self.edit.setListWidget(self.labelList) layout.addWidget(self.labelList) self.setLayout(layout) # completion completer = QtWidgets.QCompleter() if not QT5 and completion != 'startswith': logger.warn("completion other than 'startswith' is only " "supported with Qt5. Using 'startswith'") completion = 'startswith' if completion == 'startswith': completer.setCompletionMode(QtWidgets.QCompleter.InlineCompletion) # Default settings. # completer.setFilterMode(QtCore.Qt.MatchStartsWith) elif completion == 'contains': completer.setCompletionMode(QtWidgets.QCompleter.PopupCompletion) completer.setFilterMode(QtCore.Qt.MatchContains) else: raise ValueError('Unsupported completion: {}'.format(completion)) completer.setModel(self.labelList.model()) self.edit.setCompleter(completer)
def init_completer(edit_widget, model): "Init QCompleter to work with filesystem" completer = QtWidgets.QCompleter(edit_widget) completer.setCaseSensitivity(Qt.CaseInsensitive) completer.setModel(model) # Optimize performance https://stackoverflow.com/a/33454284/1119602 popup = completer.popup() popup.setUniformItemSizes(True) popup.setLayoutMode(QtWidgets.QListView.Batched) edit_widget.setCompleter(completer) edit_widget.textEdited.connect(model.setPathPrefix) return completer
def __init__(self, parent=None): super(CompleterDelegate, self).__init__(parent) items = [] for plugin, obj in PLUGINS.iteritems(): for chan_name in obj.channels: items.append('{}:{}'.format(plugin, chan_name)) self.completer = QtWidgets.QCompleter(sorted(items)) self.completer.setCompletionColumn(0) self.completer.setCompletionRole(QtCore.Qt.EditRole) self.completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
def make_completer(parent): completion = Config.get('label_completion') completer = QtWidgets.QCompleter(parent) if completion == 'startswith': completer.setCompletionMode(QtWidgets.QCompleter.InlineCompletion) # Default settings. # completer.setFilterMode(QtCore.Qt.MatchStartsWith) elif completion == 'contains': completer.setCompletionMode(QtWidgets.QCompleter.PopupCompletion) completer.setFilterMode(QtCore.Qt.MatchContains) else: raise ValueError('Unsupported completion: {}'.format(completion)) return completer
def __init__(self, text="Enter object label", parent=None, labels=None, sort_labels=True, show_text_field=True): super(LabelDialog, self).__init__(parent) self.edit = LabelQLineEdit() self.edit.setPlaceholderText(text) self.edit.setValidator(labelValidator()) self.edit.editingFinished.connect(self.postProcess) layout = QtWidgets.QVBoxLayout() if show_text_field: layout.addWidget(self.edit) # buttons self.buttonBox = bb = QtWidgets.QDialogButtonBox( QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel, QtCore.Qt.Horizontal, self, ) bb.button(bb.Ok).setIcon(newIcon('done')) bb.button(bb.Cancel).setIcon(newIcon('undo')) bb.accepted.connect(self.validate) bb.rejected.connect(self.reject) layout.addWidget(bb) # label_list self.labelList = QtWidgets.QListWidget() self._sort_labels = sort_labels if labels: self.labelList.addItems(labels) if self._sort_labels: self.labelList.sortItems() else: self.labelList.setDragDropMode( QtGui.QAbstractItemView.InternalMove) self.labelList.currentItemChanged.connect(self.labelSelected) self.edit.setListWidget(self.labelList) layout.addWidget(self.labelList) self.setLayout(layout) # completion completer = QtWidgets.QCompleter() completer.setCompletionMode(QtWidgets.QCompleter.InlineCompletion) completer.setModel(self.labelList.model()) self.edit.setCompleter(completer)
def __init__(self, parent=None): QtWidgets.QLineEdit.__init__(self, parent) self.textChanged.connect(self.mark_changed) self.editingFinished.connect(self.emitUpdatedValue) self.dtype = str self.text_changed_flag = False self.context_menu = self.createStandardContextMenu self.error_check = True self._separators = ['*', '**', '/', '-', '+', ' '] self._completer_model = QStringListModel( sorted(list(PARAMETER_DICT.keys()))) self._completer = QtWidgets.QCompleter() self._completer.setModel(self._completer_model) self._completer.setWidget(self) self._completer.setCaseSensitivity(Qt.CaseInsensitive) self._completer.activated.connect(self._insertCompletion) self._keysToIgnore = [ Qt.Key_Enter, Qt.Key_Return, Qt.Key_Escape, Qt.Key_Tab ] # shouldn't TAB take us to next field?
def _create_completer(self): if self.filter_mode != self.FILTER_FUZZY: self._completer = QtWidgets.QCompleter([''], self.editor) if self.filter_mode == self.FILTER_CONTAINS: try: self._completer.setFilterMode(QtCore.Qt.MatchContains) except AttributeError: # only available with PyQt5 pass else: self._completer = SubsequenceCompleter(self.editor) self._completer.setCompletionMode(self._completer.PopupCompletion) if self.case_sensitive: self._completer.setCaseSensitivity(QtCore.Qt.CaseSensitive) else: self._completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) self._completer.activated.connect(self._insert_completion) self._completer.highlighted.connect( self._on_selected_completion_changed) self._completer.highlighted.connect(self._display_completion_tooltip)
def __init__(self, contents='', mode=QtWidgets.QFileDialog.AnyFile, dialog=None, parent=None, flags=QtCore.Qt.WindowFlags(0), **kwargs): QtWidgets.QWidget.__init__(self, parent, flags, **kwargs) self.__completer = QtWidgets.QCompleter(self) # @TODO: use QFileSystemModel instraed # model = QtWidgets.QFileSystemModel(self.__completer) model = QtWidgets.QDirModel(self.__completer) # model.setFilter(QtCore.QDir.AllEntries) # self.completer.setCompletionMode( # QtWidgets.QCompleter.InlineCompletion) self.__completer.setModel(model) self.lineEdit = QtWidgets.QLineEdit() self.lineEdit.setCompleter(self.__completer) if contents: self.lineEdit.setText(contents) icon = qtsupport.geticon('open.svg', __name__) self.button = QtWidgets.QPushButton( icon, '', toolTip=self.tr('select from file dialog')) layout = QtWidgets.QHBoxLayout() layout.addWidget(self.lineEdit) layout.addWidget(self.button) layout.setContentsMargins(0, 0, 0, 0) self.setLayout(layout) self._mode = None self.mode = mode self.dialog = dialog # if not self.dialog: # self.dialog = get_filedialog(self) self.button.clicked.connect(self.choose)
def set_word_list(self, word_list): self.word_list = word_list self.set_completer(QtWidgets.QCompleter(word_list))
def __init__( self, text="Enter object label", parent=None, labels=None, sort_labels=True, show_text_field=True, completion="startswith", fit_to_content=None, flags=None, ): if fit_to_content is None: fit_to_content = {"row": False, "column": True} self._fit_to_content = fit_to_content super(LabelDialog, self).__init__(parent) self.edit = LabelQLineEdit() self.edit.setPlaceholderText(text) self.edit.setValidator(labelpoints.utils.labelValidator()) self.edit.editingFinished.connect(self.postProcess) if flags: self.edit.textChanged.connect(self.updateFlags) self.edit_group_id = QtWidgets.QLineEdit() self.edit_group_id.setPlaceholderText("Group ID") self.edit_group_id.setValidator( QtGui.QRegExpValidator(QtCore.QRegExp(r"\d*"), None) ) layout = QtWidgets.QVBoxLayout() if show_text_field: layout_edit = QtWidgets.QHBoxLayout() layout_edit.addWidget(self.edit, 6) layout_edit.addWidget(self.edit_group_id, 2) layout.addLayout(layout_edit) # buttons self.buttonBox = bb = QtWidgets.QDialogButtonBox( QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel, QtCore.Qt.Horizontal, self, ) bb.button(bb.Ok).setIcon(labelpoints.utils.newIcon("done")) bb.button(bb.Cancel).setIcon(labelpoints.utils.newIcon("undo")) bb.accepted.connect(self.validate) bb.rejected.connect(self.reject) layout.addWidget(bb) # label_list self.labelList = QtWidgets.QListWidget() if self._fit_to_content["row"]: self.labelList.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff ) if self._fit_to_content["column"]: self.labelList.setVerticalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff ) self._sort_labels = sort_labels if labels: self.labelList.addItems(labels) if self._sort_labels: self.labelList.sortItems() else: self.labelList.setDragDropMode( QtWidgets.QAbstractItemView.InternalMove ) self.labelList.currentItemChanged.connect(self.labelSelected) self.labelList.itemDoubleClicked.connect(self.labelDoubleClicked) self.edit.setListWidget(self.labelList) layout.addWidget(self.labelList) # label_flags if flags is None: flags = {} self._flags = flags self.flagsLayout = QtWidgets.QVBoxLayout() self.resetFlags() layout.addItem(self.flagsLayout) self.edit.textChanged.connect(self.updateFlags) self.setLayout(layout) # completion completer = QtWidgets.QCompleter() if not QT5 and completion != "startswith": logger.warn( "completion other than 'startswith' is only " "supported with Qt5. Using 'startswith'" ) completion = "startswith" if completion == "startswith": completer.setCompletionMode(QtWidgets.QCompleter.InlineCompletion) # Default settings. # completer.setFilterMode(QtCore.Qt.MatchStartsWith) elif completion == "contains": completer.setCompletionMode(QtWidgets.QCompleter.PopupCompletion) completer.setFilterMode(QtCore.Qt.MatchContains) else: raise ValueError("Unsupported completion: {}".format(completion)) completer.setModel(self.labelList.model()) self.edit.setCompleter(completer)
def add_completer(widget, items): """Add simple completion to a widget""" completer = QtWidgets.QCompleter(items, widget) completer.setCaseSensitivity(Qt.CaseInsensitive) completer.setCompletionMode(QtWidgets.QCompleter.InlineCompletion) widget.setCompleter(completer)
def __init__(self, **kwargs): parent = kwargs['parent'] if 'parent' in kwargs else None labels = kwargs['labels'] if 'labels' in kwargs else None sort_labels = kwargs['sort_labels'] if 'sort_labels' in kwargs else None show_text_field = kwargs[ 'show_text_field'] if 'show_text_field' in kwargs else None fit_to_content = kwargs[ 'fit_to_content'] if 'fit_to_content' in kwargs else None flags = kwargs['flags'] if 'flags' in kwargs else None completion = 'startswith' text = "Enter object label" if fit_to_content is None: fit_to_content = {'row': False, 'column': True} self._fit_to_content = fit_to_content super(LabelDialog, self).__init__(parent) self.edit = LabelQLineEdit() self.edit.setPlaceholderText(text) self.edit.setValidator(utils.labelValidator()) self.edit.editingFinished.connect(self.postProcess) if flags: self.edit.textChanged.connect(self.updateFlags) layout = QtWidgets.QVBoxLayout() if show_text_field: layout.addWidget(self.edit) # buttons self.buttonBox = bb = QtWidgets.QDialogButtonBox( QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel, QtCore.Qt.Horizontal, self) bb.button(bb.Ok).setIcon(utils.newIcon('done')) bb.button(bb.Cancel).setIcon(utils.newIcon('undo')) bb.accepted.connect(self.validate) bb.rejected.connect(self.reject) layout.addWidget(bb) # label_list self.labelList = QtWidgets.QListWidget() if self._fit_to_content['row']: self.labelList.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) if self._fit_to_content['column']: self.labelList.setVerticalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) self._sort_labels = sort_labels if labels: self.labelList.addItems(labels) if self._sort_labels: self.labelList.sortItems() else: self.labelList.setDragDropMode( QtWidgets.QAbstractItemView.InternalMove) self.labelList.currentItemChanged.connect(self.labelSelected) self.edit.setListWidget(self.labelList) layout.addWidget(self.labelList) # label_flags if flags is None: flags = {} self._flags = flags self.flagsLayout = QtWidgets.QVBoxLayout() self.resetFlags() layout.addItem(self.flagsLayout) self.edit.textChanged.connect(self.updateFlags) self.setLayout(layout) # completion completer = QtWidgets.QCompleter() if not QT5 and completion != 'startswith': logger.warn( "completion other than 'startswith' is only supported with Qt5. Using 'startswith'" ) completion = 'startswith' if completion == 'startswith': completer.setCompletionMode(QtWidgets.QCompleter.InlineCompletion) # Default settings. # completer.setFilterMode(QtCore.Qt.MatchStartsWith) elif completion == 'contains': completer.setCompletionMode(QtWidgets.QCompleter.PopupCompletion) completer.setFilterMode(QtCore.Qt.MatchContains) else: raise ValueError('Unsupported completion: {}'.format(completion)) completer.setModel(self.labelList.model()) self.edit.setCompleter(completer)
def __init__(self, parent=None): super().__init__(parent) layout = QtWidgets.QHBoxLayout(self) pal = self.palette() pal.setColor(QtGui.QPalette.Background, pal.color(QtGui.QPalette.Base)) self.setPalette(pal) self.setAutoFillBackground(True) self.setFrameShape(self.StyledPanel) self.layout().setContentsMargins(4, 0, 0, 0) self.layout().setSpacing(0) # Edit presented path textually self.line_address = QtWidgets.QLineEdit(self) self.line_address.setFrame(False) self.line_address.hide() self.line_address.keyPressEvent_super = self.line_address.keyPressEvent self.line_address.keyPressEvent = self.line_address_keyPressEvent self.line_address.focusOutEvent = lambda e: self._cancel_edit() self.completer = QtWidgets.QCompleter(self) # FIXME: # self.completer.setModel(QtCore.QStringListModel()) fs_model = QtWidgets.QFileSystemModel(self.completer) fs_model.setRootPath("") fs_model.setFilter(QtCore.QDir.Dirs | QtCore.QDir.Drives | QtCore.QDir.NoDotAndDotDot | QtCore.QDir.AllDirs) self.completer.setModel(fs_model) self.completer.setCaseSensitivity(Qt.CaseInsensitive) self.completer.activated.connect(self.set_path) self.line_address.setCompleter(self.completer) layout.addWidget(self.line_address) # Container for `btn_crumbs_hidden`, `crumbs_panel`, `switch_space` self.crumbs_container = QtWidgets.QWidget(self) crumbs_cont_layout = QtWidgets.QHBoxLayout(self.crumbs_container) crumbs_cont_layout.setContentsMargins(0, 0, 0, 0) crumbs_cont_layout.setSpacing(0) layout.addWidget(self.crumbs_container) # Hidden breadcrumbs menu button self.btn_crumbs_hidden = QtWidgets.QToolButton(self) self.btn_crumbs_hidden.setAutoRaise(True) self.btn_crumbs_hidden.setPopupMode(QtWidgets.QToolButton.InstantPopup) self.btn_crumbs_hidden.setArrowType(Qt.LeftArrow) self.btn_crumbs_hidden.setStyleSheet("QToolButton::menu-indicator {" "image: none;}") self.btn_crumbs_hidden.setMinimumSize( self.btn_crumbs_hidden.minimumSizeHint()) self.btn_crumbs_hidden.hide() crumbs_cont_layout.addWidget(self.btn_crumbs_hidden) menu = QtWidgets.QMenu(self.btn_crumbs_hidden) # FIXME: menu.aboutToShow.connect(self._hidden_crumbs_menu_show) self.btn_crumbs_hidden.setMenu(menu) # Container for breadcrumbs self.crumbs_panel = QtWidgets.QWidget(self) crumbs_layout = QtWidgets.QHBoxLayout(self.crumbs_panel) crumbs_layout.setContentsMargins(0, 0, 0, 0) crumbs_layout.setSpacing(0) crumbs_cont_layout.addWidget(self.crumbs_panel) # Clicking on empty space to the right puts the bar into edit mode self.switch_space = QtWidgets.QWidget(self) s_policy = self.switch_space.sizePolicy() s_policy.setHorizontalStretch(1) self.switch_space.setSizePolicy(s_policy) self.switch_space.mouseReleaseEvent = self.switch_space_mouse_up crumbs_cont_layout.addWidget(self.switch_space) self.btn_browse = QtWidgets.QToolButton(self) self.btn_browse.setAutoRaise(True) self.btn_browse.setText("...") self.btn_browse.setToolTip("Browse for folder") self.btn_browse.clicked.connect(self._browse_for_folder) layout.addWidget(self.btn_browse) self.setMaximumHeight(self.line_address.height()) # FIXME: self.first_visible, self.l_breadcrumbs = 0, None self.path_ = None self.set_path(Path())
def __init__(self, text="Enter object label", parent=None, labels=None, sort_labels=True, show_text_field=True, completion='startswith', fit_to_content=None): if fit_to_content is None: fit_to_content = {'row': False, 'column': True} self._fit_to_content = fit_to_content super(LabelDialog, self).__init__(parent) self.edit = LabelQLineEdit() self.edit.setPlaceholderText(text) self.edit.setValidator(labelme.utils.labelValidator()) self.edit.editingFinished.connect(self.postProcess) layout = QtWidgets.QVBoxLayout() if show_text_field: layout.addWidget(self.edit) #tags # lihaodong edit self.first_lable = QtWidgets.QLabel() self.first_lable.setText('first') self.first_combox=QtWidgets.QComboBox() self.first_combox.addItem('front') self.first_combox.addItem('left') self.first_combox.addItem('right') self.first_combox.addItem('rear') self.second_lable = QtWidgets.QLabel() self.second_lable.setText('second') self.second_combox = QtWidgets.QComboBox() self.second_combox.addItem('front') self.second_combox.addItem('left') self.second_combox.addItem('right') self.second_combox.addItem('rear') layout.addWidget(self.first_lable) layout.addWidget(self.first_combox) layout.addWidget(self.second_lable) layout.addWidget(self.second_combox) ## # buttons self.buttonBox = bb = QtWidgets.QDialogButtonBox( QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel, QtCore.Qt.Horizontal, self, ) bb.button(bb.Ok).setIcon(labelme.utils.newIcon('done')) bb.button(bb.Cancel).setIcon(labelme.utils.newIcon('undo')) bb.accepted.connect(self.validate) bb.rejected.connect(self.reject) layout.addWidget(bb) # label_list self.labelList = QtWidgets.QListWidget() if self._fit_to_content['row']: self.labelList.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff ) if self._fit_to_content['column']: self.labelList.setVerticalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff ) self._sort_labels = sort_labels if labels: self.labelList.addItems(labels) if self._sort_labels: self.labelList.sortItems() else: self.labelList.setDragDropMode( QtGui.QAbstractItemView.InternalMove) self.labelList.currentItemChanged.connect(self.labelSelected) self.edit.setListWidget(self.labelList) layout.addWidget(self.labelList) self.setLayout(layout) # completion completer = QtWidgets.QCompleter() if not QT5 and completion != 'startswith': logger.warn( "completion other than 'startswith' is only " "supported with Qt5. Using 'startswith'" ) completion = 'startswith' if completion == 'startswith': completer.setCompletionMode(QtWidgets.QCompleter.InlineCompletion) # Default settings. # completer.setFilterMode(QtCore.Qt.MatchStartsWith) elif completion == 'contains': completer.setCompletionMode(QtWidgets.QCompleter.PopupCompletion) completer.setFilterMode(QtCore.Qt.MatchContains) else: raise ValueError('Unsupported completion: {}'.format(completion)) completer.setModel(self.labelList.model()) self.edit.setCompleter(completer)
def __init__(self, text="Enter object label", parent=None, labels=None, sub_labels=None, sort_labels=True, show_text_field=True, completion="startswith", fit_to_content=None, flags=None, app=None): if fit_to_content is None: fit_to_content = {"row": False, "column": True} self._fit_to_content = fit_to_content super(LabelDialog, self).__init__(parent) # disable default button. Use default close button will have bug # that sub window setting will be reset and can not modify again. # QtCore.Qt.Dialog setting will be reseted. self.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False) self.setWindowFlag(QtCore.Qt.WindowContextHelpButtonHint, False) self.edit = LabelQLineEdit() self.edit.setPlaceholderText(text) self.edit.setValidator(labelme.utils.labelValidator()) self.edit.editingFinished.connect(self.postProcess) if flags: self.edit.textChanged.connect(self.updateFlags) self.edit_group_id = QtWidgets.QLineEdit() self.edit_group_id.setPlaceholderText("Group ID") self.edit_group_id.setValidator( QtGui.QRegExpValidator(QtCore.QRegExp(r"\d*"), None)) layout = QtWidgets.QVBoxLayout() if show_text_field: layout_edit = QtWidgets.QHBoxLayout() layout_edit.addWidget(self.edit, 6) layout_edit.addWidget(self.edit_group_id, 2) layout.addLayout(layout_edit) ### cc region threshold self.cc_threshold_ui = [] ## slider defaultValue = 6 self.sl = QSlider(Qt.Horizontal) self.sl.setMinimum(0) self.sl.setMaximum(100) self.sl.setValue(defaultValue) self.sl.valueChanged.connect(self.sl_valuechange) ## label show slider value self.slLabel = QLabel("") self.slLabel.setText(str(defaultValue)) self.slLabel.setAlignment(Qt.AlignCenter) ## tie slider and label together slider_set = QtWidgets.QHBoxLayout() slider_set.addWidget(self.sl, 6) slider_set.addWidget(self.slLabel, 2) ## add to total layout self.cc_threshold_ui.append(self.sl) self.cc_threshold_ui.append(self.slLabel) layout.addLayout(slider_set) ### text box attribute self.text_box_ui = [] text_box_set = QtWidgets.QVBoxLayout() ## column of text tmpHor = QtWidgets.QHBoxLayout() self.text_cols = QtWidgets.QLineEdit("4") self.text_cols.setPlaceholderText("") self.text_cols.setValidator( QtGui.QRegExpValidator(QtCore.QRegExp(r"\d*"), None)) # label self.text_cols_label = QLabel("Columns of Text") self.text_cols_label.setAlignment(Qt.AlignLeft) tmpHor.addWidget(self.text_cols_label, 5) tmpHor.addWidget(self.text_cols, 5) # add to ui group self.text_box_ui.append(self.text_cols_label) self.text_box_ui.append(self.text_cols) text_box_set.addLayout(tmpHor) ## rows of text tmpHor = QtWidgets.QHBoxLayout() self.text_rows = QtWidgets.QLineEdit("4") self.text_rows.setPlaceholderText("") self.text_rows.setValidator( QtGui.QRegExpValidator(QtCore.QRegExp(r"\d*"), None)) # label self.text_rows_label = QLabel("Rows of Text") self.text_rows_label.setAlignment(Qt.AlignLeft) tmpHor.addWidget(self.text_rows_label, 5) tmpHor.addWidget(self.text_rows, 5) # add to ui group self.text_box_ui.append(self.text_rows_label) self.text_box_ui.append(self.text_rows) text_box_set.addLayout(tmpHor) ## generate button self.generateBoxbb = QtWidgets.QDialogButtonBox( QtWidgets.QDialogButtonBox.Apply | QtWidgets.QDialogButtonBox.Reset, QtCore.Qt.Horizontal, self) self.generateBoxbb.button(self.generateBoxbb.Apply).clicked.connect( self.setTextBoxAttribute) self.generateBoxbb.button(self.generateBoxbb.Reset).clicked.connect( self.resetTextBoxAttribute) # add to ui group self.text_box_ui.append(self.generateBoxbb) text_box_set.addWidget(self.generateBoxbb, alignment=QtCore.Qt.AlignRight) ## add to total layout layout.addLayout(text_box_set) # buttons self.buttonBox = bb = QtWidgets.QDialogButtonBox( QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel, QtCore.Qt.Horizontal, self, ) bb.button(bb.Ok).setIcon(labelme.utils.newIcon("done")) bb.button(bb.Cancel).setIcon(labelme.utils.newIcon("undo")) bb.accepted.connect(self.validate) bb.rejected.connect(self.reject) layout.addWidget(bb) # label_list self.labelList = QtWidgets.QListWidget() if self._fit_to_content["row"]: self.labelList.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) if self._fit_to_content["column"]: self.labelList.setVerticalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) self._sort_labels = sort_labels if labels: self.labelList.addItems(labels) if self._sort_labels: self.labelList.sortItems() else: self.labelList.setDragDropMode( QtWidgets.QAbstractItemView.InternalMove) self.labelList.currentItemChanged.connect(self.labelSelected) self.labelList.itemDoubleClicked.connect(self.labelDoubleClicked) self.edit.setListWidget(self.labelList) layout.addWidget(self.labelList) # sub label list self.sub_labelList = QtWidgets.QListWidget() if self._fit_to_content["row"]: self.sub_labelList.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) if self._fit_to_content["column"]: self.sub_labelList.setVerticalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) if labels: self.sub_labelList.addItems(sub_labels) self.sub_labelList.setDragDropMode( QtWidgets.QAbstractItemView.InternalMove) self.sub_labelList.currentItemChanged.connect(self.labelSelected) # make sure main label has content self.sub_labelList.itemDoubleClicked.connect(self.labelDoubleClicked) self.edit.setListWidget(self.sub_labelList) layout.addWidget(self.sub_labelList) # label_flags if flags is None: flags = {} self._flags = flags self.flagsLayout = QtWidgets.QVBoxLayout() self.resetFlags() layout.addItem(self.flagsLayout) self.edit.textChanged.connect(self.updateFlags) self.setLayout(layout) # completion completer = QtWidgets.QCompleter() if not QT5 and completion != "startswith": logger.warn("completion other than 'startswith' is only " "supported with Qt5. Using 'startswith'") completion = "startswith" if completion == "startswith": completer.setCompletionMode(QtWidgets.QCompleter.InlineCompletion) # Default settings. # completer.setFilterMode(QtCore.Qt.MatchStartsWith) elif completion == "contains": completer.setCompletionMode(QtWidgets.QCompleter.PopupCompletion) completer.setFilterMode(QtCore.Qt.MatchContains) else: raise ValueError("Unsupported completion: {}".format(completion)) completer.setModel(self.labelList.model()) self.completer = completer self.edit.setCompleter(completer) # sub completion completer = QtWidgets.QCompleter() if not QT5 and completion != "startswith": logger.warn("completion other than 'startswith' is only " "supported with Qt5. Using 'startswith'") completion = "startswith" if completion == "startswith": completer.setCompletionMode(QtWidgets.QCompleter.InlineCompletion) # Default settings. # completer.setFilterMode(QtCore.Qt.MatchStartsWith) elif completion == "contains": completer.setCompletionMode(QtWidgets.QCompleter.PopupCompletion) completer.setFilterMode(QtCore.Qt.MatchContains) else: raise ValueError("Unsupported completion: {}".format(completion)) completer.setModel(self.sub_labelList.model()) self.sub_completer = completer # mine # self.inEdit = False self.app = app self.sub_window = SubWindow(self)