En este artículo, veremos cómo podemos mostrar los elementos marcados en la parte de la vista de texto (edición de línea) del cuadro combinado, sabemos que para crear los elementos verificables en el cuadro combinado, tenemos que crear una clase de verificación. cuadro combinado que hereda la clase de cuadro combinado y agrega los elementos verificables, pero cuando verificamos elementos, solo el último elemento verificado por el usuario es visible en la parte de vista de texto, no se muestran todos los elementos verificados.
Para mostrar los elementos seleccionados en la parte de vista de texto, haga lo siguiente:
1. Dentro de la clase de cuadro combinado verificable
2. Agregue la función a la que se llama cuando se verifica cualquier elemento
3. Dentro de esa función, verifique qué elementos se verifican iterando todos los elementos
4. Muestre los índices de todos los elementos en el cuadro combinado que se comprueban
A continuación se muestra la implementación.
from PyQt5.QtWidgets import QApplication, QComboBox, QMainWindow from PyQt5.QtWidgets import QWidget, QVBoxLayout from PyQt5.QtGui import QStandardItemModel from PyQt5.QtCore import Qt import sys # creating checkable combo box class class CheckableComboBox(QComboBox): def __init__(self): super(CheckableComboBox, self).__init__() self.view().pressed.connect(self.handle_item_pressed) self.setModel(QStandardItemModel(self)) # when any item get pressed def handle_item_pressed(self, index): # getting which item is pressed item = self.model().itemFromIndex(index) # make it check if unchecked and vice-versa if item.checkState() == Qt.Checked: item.setCheckState(Qt.Unchecked) else: item.setCheckState(Qt.Checked) # calling method self.check_items() # method called by check_items def item_checked(self, index): # getting item at index item = self.model().item(index, 0) # return true if checked else false return item.checkState() == Qt.Checked # calling method def check_items(self): # blank list checkedItems = [] # traversing the items for i in range(self.count()): # if item is checked add it to the list if self.item_checked(i): checkedItems.append(i) # call this method self.update_labels(checkedItems) # method to update the label def update_labels(self, item_list): n = '' count = 0 # traversing the list for i in item_list: # if count value is 0 don't add comma if count == 0: n += ' % s' % i # else value is greater then 0 # add comma else: n += ', % s' % i # increment count count += 1 # loop for i in range(self.count()): # getting label text_label = self.model().item(i, 0).text() # default state if text_label.find('-') >= 0: text_label = text_label.split('-')[0] # shows the selected items item_new_text_label = text_label + ' - selected index: ' + n # setting text to combo box self.setItemText(i, item_new_text_label) # flush sys.stdout.flush() class Window(QMainWindow): def __init__(self): super(QMainWindow, self).__init__() # creating a widget object myQWidget = QWidget() # vertical box layout myBoxLayout = QVBoxLayout() myQWidget.setLayout(myBoxLayout) # central widget self.setCentralWidget(myQWidget) # creating checkable combo box self.ComboBox = CheckableComboBox() # traversing items for i in range(3): # adding item self.ComboBox.addItem("Combobox Item " + str(i)) item = self.ComboBox.model().item(i, 0) # setting item unchecked item.setCheckState(Qt.Unchecked) # adding combo box to the layout myBoxLayout.addWidget(self.ComboBox) # drivers code if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.show() window.resize(480, 320) sys.exit(app.exec_())
Producción :
Publicación traducida automáticamente
Artículo escrito por rakshitarora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA