from PyQt5.QtCore import Qt, pyqtSignal from PyQt5.QtWidgets import ( QWidget, QHBoxLayout, QPushButton, QComboBox, QSizePolicy ) class FilterWidget(QWidget): filterBtnClicked = pyqtSignal(str) def __init__(self, parent=None): super(FilterWidget, self).__init__(parent) self.init_ui() def init_ui(self): layout = QHBoxLayout(self) self.filter_combo_box = QComboBox() self.filter_combo_box.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum) self.filter_combo_box.setEditable(True) self.filter_combo_box.setMaxVisibleItems(25) self.filter_combo_box.setMaximumSize(440, 24) self.filter_combo_box.setMinimumSize(220, 24) self.filter_combo_box.keyPressEvent = self.on_filter_combo_box_key_pressed layout.addWidget(self.filter_combo_box) self.filter_btn = QPushButton("Filter", self) self.filter_btn.clicked.connect(self.on_filter_btn_clicked) self.filter_btn.setMinimumSize(40, 24) self.filter_btn.setMaximumSize(40, 24) layout.addWidget(self.filter_btn) self.setMaximumSize(500, 40) def set_sample_filters(self, filters): for f in filters: self.filter_combo_box.addItem(f) def add_sample_filter(self, sample_filter): self.filter_combo_box.addItem(sample_filter) def on_filter_btn_clicked(self): self.filterBtnClicked.emit(self.filter_combo_box.currentText()) def on_filter_combo_box_key_pressed(self, event): """Checks if enter is pressed on filterEdit""" key = event.key() if key in (Qt.Key_Return, Qt.Key_Enter): self.on_filter_btn_clicked() QComboBox.keyPressEvent(self.filter_combo_box, event)