Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Передать заголовки столбцов таблицы [RSS Feed]

#1 Янв. 14, 2018 19:46:03

Artur87
Зарегистрирован: 2018-01-14
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Передать заголовки столбцов таблицы

Здравствуйте! Помогите с таким вопросом.

На форме разместил виджет 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)

Офлайн

#2 Янв. 15, 2018 12:02:30

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Передать заголовки столбцов таблицы

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

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

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



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Янв. 15, 2018 17:00:50

Artur87
Зарегистрирован: 2018-01-14
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Передать заголовки столбцов таблицы

Насчет addItems я в курсе - в первом посте неправильно написал ))
А вот насчет itemFromIndex + text() приведите, пожалуйста, пример для наглядности

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

Думал, что смогу так забрать название столбца по индексу.
Но в ответ на print(self.header) выводит None

Отредактировано Artur87 (Янв. 15, 2018 20:32:52)

Офлайн

#4 Янв. 17, 2018 10:39:01

KriO
Зарегистрирован: 2012-10-07
Сообщения: 61
Репутация: +  9  -
Профиль   Отправить e-mail  

Передать заголовки столбцов таблицы

Мне не понятно, зачем Вам передавать из комбобокса заголовки столбцов таблицы? Если у вас порядок заголовков в комбобоксе и в таблице совпадает, то данные для построения графика Вы можете достать из соответствующего столбца таблицы по индексу выбранного итема из комбобокса. На мой взгляд, итемы в комбобоксах лучше не скрывать, а делать не доступными для выбора, т.е. setEnabled(False), тогда пользователь будет видеть все варианты выбора, а не только возможные в данный момент.

Офлайн

#5 Янв. 18, 2018 13:43:09

Artur87
Зарегистрирован: 2018-01-14
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Передать заголовки столбцов таблицы

Таблица формируется динамически из загружаемого набора данных - файла csv. Поэтому таблица всегда выходит разной, заранее заголовки не сформируешь.

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

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

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

Отредактировано Artur87 (Янв. 18, 2018 13:46:26)

Офлайн

  • Начало
  • » GUI
  • » Передать заголовки столбцов таблицы[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version