Найти - Пользователи
Полная версия: Передать заголовки столбцов таблицы
Начало » GUI » Передать заголовки столбцов таблицы
1
Artur87
Здравствуйте! Помогите с таким вопросом.

На форме разместил виджет QTableWidget. В него передаю содержимое загружаемого csv-файла. Соответственно, все содержимое выводится в виде таблицы. Здесь проблем нет.

Под QTableWidget находятся два ComboBox. В одном из них выбирается значения для отображения на оси X, в другом для оси Y. Для дальнейшего построения графика по значениям таблицы.

Каждый ComboBox должен отображать список из заголовков столбцов таблицы, которая выводится в QTableWidget.
Как передать этот список? Использовал конструкцию вида

spisok = self.itemFromIndex()
self.ComboBox1.addItem(spisok)

Не выходит.
Этот момент интересует в первую очередь.


А дальше надо в зависимости от выбранного индекса (названия) столбца, передать в переменные значения этих столбцов для указанного построения графика.


Желательно, чтобы во втором ComboBox скрывалось то значение, которое выбрано в первом ComboBox. Если в первом комбо выбирается другое значение, то соответственно, из второго скрывается уже оно. А предыдущее появляется.
Это для того, чтобы не был выбран один и тот же столбец для обеих осей.

Либо ничего не скрывать, но выводить предупреждающее сообщение.

Как реализовать такую функцию?

Заранее спасибо ))

Вот код для виджета QTableWidget

 class MyTable(QtWidgets.QTableWidget):
    def __init__(self, r, c):
        super().__init__(r, c)
        self.check_change = True
        self.init_ui()
 
    def init_ui(self):
        self.cellChanged.connect(self.c_current)
        #self.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) # Запрет редактирования таблицы
        self.show()
 
    def c_current(self):
        if self.check_change:
            row = self.currentRow()
            col = self.currentColumn()
            value = self.item(row, col)
            value = value.text()
 
 
    def open_sheet(self):
        self.check_change = False
        path = QtWidgets.QFileDialog.getOpenFileName(self, 'Open CSV', os.getenv('HOME'), 'CSV(*.csv)')
        if path[0] != '':
            with open(path[0], newline='', encoding="utf-8") as csv_file:
                self.setRowCount(0)
                self.setColumnCount(2)
                my_file = csv.reader(csv_file, delimiter=',', quotechar='|')
                for row_data in my_file:
                    row = self.rowCount()
                    self.insertRow(row)
                    if len(row_data) > 2:
                        self.setColumnCount(len(row_data))
                    for column, stuff in enumerate(row_data):
                        item = QtWidgets.QTableWidgetItem(stuff)
                        self.setItem(row, column, item)
                
        self.selectRow(0)
        self.check_change = True

А на форме я его вывожу с помощью строки
self.tableWidget = MyTable(10, 2)
PEHDOM
Artur87
spisok = self.itemFromIndex()
self.ComboBox1.addItem(spisok)

Не выходит.
Этот момент интересует в первую очередь.

itemFromIndex должен принимать индекс, и даже в таком случае вы получите ссылку на QTableWidgetItem откуда нужно выдрать текст с помощью метода text()
Что по вашему должно получиться в spisok?
Если вы хотите комбобоксу скормить список значений за один раз то нужно использовать addItems вместо addItem
Artur87
Насчет addItems я в курсе - в первом посте неправильно написал ))
А вот насчет itemFromIndex + text() приведите, пожалуйста, пример для наглядности

еще пробовал метод QTableWidget.horizontalHeaderItem
Вот так:
self.header = QtWidgets.QTableWidget.horizontalHeaderItem (self, 0)

Думал, что смогу так забрать название столбца по индексу.
Но в ответ на print(self.header) выводит None
KriO
Мне не понятно, зачем Вам передавать из комбобокса заголовки столбцов таблицы? Если у вас порядок заголовков в комбобоксе и в таблице совпадает, то данные для построения графика Вы можете достать из соответствующего столбца таблицы по индексу выбранного итема из комбобокса. На мой взгляд, итемы в комбобоксах лучше не скрывать, а делать не доступными для выбора, т.е. setEnabled(False), тогда пользователь будет видеть все варианты выбора, а не только возможные в данный момент.
Artur87
Таблица формируется динамически из загружаемого набора данных - файла csv. Поэтому таблица всегда выходит разной, заранее заголовки не сформируешь.

Но собственно я жестко ступил )) Я хотел, чтобы заголовки набора данных “перекочевывали” в заголовки таблицы. И значения комбобокса формировались динамически из заголовков таблицы.

Хотя можно передать их напрямую из загружаемого файла ) Что сейчас и буду пытаться сделать

А передавать значения из комбобокса да, действительно, можно по индексу.
То есть проблема была в том, как привести содержимое комбо бокса в соответствие с заголовками таблицы. Об этом шла речь )
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB