Создание функции элемента TableView, такой как Qcombobox вместо QlineEdit в PYQTPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Создание функции элемента TableView, такой как Qcombobox вместо QlineEdit в PYQT

Сообщение Anonymous »

Я написал класс, который делает окно, частью этого класса является функция dynamic_table_view, которая создает виджет таблицы с возможностью просмотра данных и редактировать их в том же окне: < /p>
def dynamic_table_view(self, cur, table_name, edit=True, add=True, layout=None):
if layout is None:
layout = self.main_layout
df = pd.read_sql(f"SELECT * FROM {table_name}", conn)
col_types = parse_types(cur, table_name)
model = QStandardItemModel(df.shape[0], df.shape[1])
model.setHorizontalHeaderLabels(list(df.columns))
for row in range(df.shape[0]):
for col in range(df.shape[1]):
print(col, df.columns, df.columns[col])
item = QStandardItem(str(df.iat[row, col]))
if edit and df.columns[col] != 'id':
item.setEditable(True)
else:
item.setEditable(False)
model.setItem(row, col, item)

table_view = QTableView()
table_view.setModel(model)

if edit:
table_view.setEditTriggers(QAbstractItemView.EditTrigger.DoubleClicked | QAbstractItemView.EditTrigger.SelectedClicked)
table_view.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
table_view.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)

table_view.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
self.add_widget(table_view, layout)

#changing selected item onclick
def on_item_changed(item):
row = item.row()
col = item.column()
new_value = item.text()
column_name = df.columns[col]
row_id = df.iloc[row]["id"]
if col_types[column_name] == "integer":
query = f"UPDATE {table_name} SET {column_name} = {new_value} WHERE id = {row_id}"
else:
query = f"UPDATE {table_name} SET {column_name} = '{new_value}' WHERE id = {row_id}"
execute_query(cur, query)
model.itemChanged.connect(on_item_changed)
< /code>
По сути, мне нужно сделать все ячейки в определенном столбце, чтобы действовать как Qcombobox. Я читал, что мне нужно использовать для этого делегата, но я не совсем понимаю, как его реализовать. Из того, что я видел, это можно было сделать с созданием отдельного класса для делегата или как -то переопределяю его, но мне было интересно, есть ли способ сделать его короче, потому что мне нужно было бы создать в этом одном конкретном куске кода (например, я бы не создавал класс для создания Windows, если мне нужно было написать один экземпляр этого кода).>

Подробнее здесь: https://stackoverflow.com/questions/796 ... it-in-pyqt
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»