Изменение ширины виджета QComboBox
Я написал графический интерфейс на PyQt5 с таблицей и полями для ввода данных для фильтрации в таблице.
Поле над столбцом "Код события" реализовано с помощь QComboBox
.
self.filter_event_code = QComboBox()
ev_list = [
'61 - большое сопротивление СЛИ, АУ могут работать нестабильно, заряд ионисторов запрещен',
'79 - норма напряжения БП', '138 - нагрев НЭ', '148 - вскрытие оросителя',
'201 - задвижка в промежуточном положении',
'205 - обрыв ЛО']
for item in ev_list:
self.filter_event_code.addItem(item)
Возможно ли сделать так, чтобы этот комбобокс в свернутом виде имел небольшую ширину (как сейчас у меня), а при открытии он разворачивался и становился шире, чтобы влезал полный текст (или почти полный) вариантов для выбора?
import sys
from PyQt5.QtCore import QDateTime
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from styles import AlignDelegate
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# конфигурация главного окна и центрального виджета
self.central_widget = QWidget(self)
self.setGeometry(50, 50, 1500, 800)
self.setCentralWidget(self.central_widget)
self.layout_main_window = QVBoxLayout()
self.central_widget.setLayout(self.layout_main_window)
# конфигурация верхней панели инструментов
self.layout_toolbar = QHBoxLayout()
# конфигурация кнопок
self.layout_toolbar_buttons = QHBoxLayout()
self.layout_toolbar_buttons.addStretch(1)
self.btn_monitoring = QPushButton("Мониторинг")
self.btn_start_reading = QPushButton("Считать")
self.btn_download_from_file = QPushButton("Загрузить из файла")
self.btn_save_to_file = QPushButton("Экспорт")
self.layout_toolbar_buttons.addWidget(self.btn_monitoring)
self.layout_toolbar_buttons.addWidget(self.btn_start_reading)
self.layout_toolbar_buttons.addWidget(self.btn_download_from_file)
self.layout_toolbar_buttons.addWidget(self.btn_save_to_file)
# конфигурация фильтров
self.layout_toolbar_filters = QHBoxLayout()
self.filter_number = QLineEdit()
self.filter_datetime_from = QDateTimeEdit(QDateTime.currentDateTime())
self.filter_datetime_from.setDisplayFormat('yyyy.MM.dd HH:mm:ss')
self.filter_datetime_from.setCalendarPopup(True)
self.filter_datetime_to = QDateTimeEdit(QDateTime.currentDateTime())
self.filter_datetime_to.setDisplayFormat('yyyy.MM.dd HH:mm:ss')
self.filter_datetime_to.setCalendarPopup(True)
self.filter_bku = QLineEdit()
self.filter_kl = QLineEdit()
self.filter_au = QLineEdit()
self.filter_channel = QLineEdit()
# _______________________________________________________________________________
# у этого комбобокса надо изменить ширину при открытии
self.filter_event_code = QComboBox()
ev_list = [
'61 - большое сопротивление СЛИ, АУ могут работать нестабильно, заряд ионисторов запрещен',
'79 - норма напряжения БП', '138 - нагрев НЭ', '148 - вскрытие оросителя',
'201 - задвижка в промежуточном положении',
'205 - обрыв ЛО']
for item in ev_list:
self.filter_event_code.addItem(item)
self.filter_add_param = QLineEdit()
filters = [
self.filter_number, self.filter_bku, self.filter_kl,self.filter_au,
self.filter_channel, self.filter_event_code, self.filter_add_param,
]
for filter in filters:
filter.setMaximumWidth(60)
self.filter_datetime_from.setMinimumWidth(130)
self.filter_datetime_to.setMinimumWidth(130)
self.filter_event_code.setMinimumWidth(65)
# чекбоксы
self.checkbox_number = QCheckBox()
self.checkbox_datetime = QCheckBox()
self.checkbox_bku = QCheckBox()
self.checkbox_kl = QCheckBox()
self.checkbox_au = QCheckBox()
self.checkbox_channel = QCheckBox()
self.checkbox_event_code = QCheckBox()
self.checkbox_add_param = QCheckBox()
# слои
self.layout_toolbar_filters.addSpacing(50)
self.layout_toolbar_filters.addWidget(self.filter_number)
self.layout_toolbar_filters.addWidget(self.checkbox_number)
self.layout_toolbar_filters.addSpacing(10)
self.layout_toolbar_filters.addWidget(self.filter_datetime_from)
self.layout_toolbar_filters.addWidget(QLabel('-'))
self.layout_toolbar_filters.addWidget(self.filter_datetime_to)
self.layout_toolbar_filters.addWidget(self.checkbox_datetime)
self.layout_toolbar_filters.addSpacing(10)
self.layout_toolbar_filters.addWidget(self.filter_bku)
self.layout_toolbar_filters.addWidget(self.checkbox_bku)
self.layout_toolbar_filters.addSpacing(15)
self.layout_toolbar_filters.addWidget(self.filter_kl)
self.layout_toolbar_filters.addWidget(self.checkbox_kl)
self.layout_toolbar_filters.addSpacing(15)
self.layout_toolbar_filters.addWidget(self.filter_au)
self.layout_toolbar_filters.addWidget(self.checkbox_au)
self.layout_toolbar_filters.addSpacing(15)
self.layout_toolbar_filters.addWidget(self.filter_channel)
self.layout_toolbar_filters.addWidget(self.checkbox_channel)
self.layout_toolbar_filters.addSpacing(15)
self.layout_toolbar_filters.addWidget(self.filter_event_code)
self.layout_toolbar_filters.addWidget(self.checkbox_event_code)
self.layout_toolbar_filters.addSpacing(15)
self.layout_toolbar_filters.addWidget(self.filter_add_param)
self.layout_toolbar_filters.addWidget(self.checkbox_add_param)
self.layout_toolbar.addLayout(self.layout_toolbar_filters)
self.layout_toolbar.addLayout(self.layout_toolbar_buttons)
self.layout_main_window.addLayout(self.layout_toolbar)
# конфигурация таблицы
self.layout_table = QHBoxLayout()
self.table = QTableWidget()
self.table.setColumnCount(9)
self.table.setRowCount(13500)
self.table.setHorizontalHeaderLabels(['№', 'Дата и время', 'БКУ', 'КЛ', 'АУ', 'Канал', 'Код события', 'Доп. параметр', 'Описание'])
self.table.horizontalHeader().setStretchLastSection(True)
self.table.horizontalHeader().setVisible(True)
for col in range(8):
self.table.setColumnWidth(col, 100)
self.table.setColumnWidth(1, 300)
self.table_alignment = AlignDelegate(self.table) # выравниевание данных в ячейках по центру
self.table.setItemDelegate(self.table_alignment) # выравниевание данных в ячейках по центру
self.layout_table.addWidget(self.table)
self.layout_main_window.addLayout(self.layout_table)
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
Источник: Stack Overflow на русском