Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 25.03.2021
Сообщений: 3
PyQt5

Открытие таблицы через диалоговое окно

25.03.2021, 06:12. Показов 3769. Ответов 2

Студворк — интернет-сервис помощи студентам
Хочу чтобы можно было открыть свою таблицу в qtablewidget через выбор файла (диалоговое окно), но мой код выводит только данные из нее (а нужно чтобы выводило таблицу полностью), к тому же и без выбора файла без выбора файла. Вот функция вывода таблицы, активируется кнопкой. Помогите
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def table(self):
    db_connect = sqlite3.connect("db.sqlite")
    cur = db_connect.cursor()
    cur.execute("SELECT * FROM Данные")
    content = cur.fetchall()
    db_connect.commit()
    cur.close()
    db_connect.close()
 
    db_table = self.tableWidget
    db_table.setColumnCount(len(content[0]))
    db_table.setRowCount(len(content))
    for i in range(len(content)):
        for j in range(len(content[0])):
            db_table.setItem(i, j, QTableWidgetItem(str(content[i][j])))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2021, 06:12
Ответы с готовыми решениями:

Ввод данных через диалоговое окно
Помогите сделать красивый ввод данных через диалоговое окно, чтобы введенные данные присвоились аргументам A, B и С. И в дальнейшем...

Вывод min и max значения с таблицы через диалоговое окно
Есть Таблица "Результаты" и в ней 4 столбца (результаты за 4 года), нужно было сделать среднее значение этих 4-ох столбцов: (+++)/4...

открытие формы как диалоговое окно
Приветсвую! У меня следующий вопрос: Как показать форму, чтобы пока она открыта нельзя было бы использовать другие формы. т.е. как...

2
 Аватар для kapbepucm
1568 / 741 / 321
Регистрация: 02.05.2020
Сообщений: 1,660
26.03.2021, 12:30
Лучший ответ Сообщение было отмечено bys1a как решение

Решение

Цитата Сообщение от bys1a Посмотреть сообщение
но мой код выводит только данные из нее (а нужно чтобы выводило таблицу полностью)
что тут имеется ввиду?

Добавлено через 34 секунды
что в таблице есть кроме данных?

Добавлено через 1 час 57 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import sys
from PyQt5.QtWidgets import QApplication, QDialog, QTableView, QPushButton
from PyQt5.QtWidgets import QFileDialog, QVBoxLayout, QComboBox, QLabel
from PyQt5.QtSql     import QSqlDatabase, QSqlTableModel
 
class TableChoiser(QDialog):
  def __init__(self, parent):
    super().__init__(parent)
    self.setLayout(QVBoxLayout())
    self.choiser = QComboBox(self)
    self.layout().addWidget(QLabel("выберите таблицу"))
    self.layout().addWidget(self.choiser)
    button = QPushButton("OK")
    button.clicked.connect(self.close)
    self.layout().addWidget(button)
 
class Window(QTableView):
  def __init__(self):
    super().__init__(None)
 
    fileName = QFileDialog.getOpenFileName(None, "укажите файл БД sqlite")[0];
    db = QSqlDatabase.addDatabase("QSQLITE")
    db.setDatabaseName(fileName);
    if not db.open():
      return
    if len(db.tables()) == 0:
      return
 
    tableChoiser = TableChoiser(None)
    tableChoiser.choiser.addItems(db.tables())
    tableChoiser.exec_()
 
    model = QSqlTableModel(None, db)
    model.setTable(tableChoiser.choiser.currentText())
    model.select()
    self.setModel(model)
 
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
1
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
26.03.2021, 13:43
Лучший ответ Сообщение было отмечено bys1a как решение

Решение

Цитата Сообщение от bys1a Посмотреть сообщение
Хочу чтобы можно было открыть свою таблицу в qtablewidget через выбор файла (диалоговое окно), но мой код выводит только данные из нее (а нужно чтобы выводило таблицу полностью), к тому же и без выбора файла без выбора файла. Вот функция вывода таблицы, активируется кнопкой. Помогите
непонятно но интересно. почему не используете готовые модели для sqlite?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import (QApplication, QTableView, QWidget, QGridLayout, QPushButton, QComboBox,
QFileDialog, QMessageBox, QMenu,QMainWindow)
from PyQt5.QtSql import QSqlTableModel, QSqlDatabase, QSqlQuery, QSqlRecord
 
class View(QMainWindow):
    def __init__(self):
        super().__init__()
        self.dbname = ''
        self.db = QSqlDatabase.addDatabase('QSQLITE')
        self.model = QSqlTableModel()
        self.model.setEditStrategy(QSqlTableModel.OnManualSubmit)
        self.view = QTableView()
        self.view.setModel(self.model)
        self.view.horizontalHeader().setSectionResizeMode(1)
        self.tableBox = QComboBox()
        self.tableBox.currentTextChanged.connect(self.on_table_box)
        self.queryBox = QComboBox()
        self.queryBox.setEditable(True)
        self.queryBox.currentIndexChanged.connect(self.on_box)
        w = QWidget()
        grid = QGridLayout(w)
        grid.setContentsMargins(0,0,0,0)
        grid.addWidget(self.view,0,0,4,4)
        grid.addWidget(self.tableBox,4,0,1,1)
        grid.addWidget(self.queryBox,4,1,1,3)
        self.setCentralWidget(w)
 
    def open_dbname(self):
        dbname,_ = QFileDialog.getOpenFileName(self,'Открыть базу данных',self.dbname,'*.db *.sqlite')
        if not dbname: return
        self.open_db(dbname)
    
    def open_db(self,dbname):
        if self.db.isOpen(): self.db.close()
        self.dbname = dbname
        self.db.setDatabaseName(self.dbname)
        if not(self.db.open()):
            QMessageBox.critical(self,"",self.db.lastError().text())
            return
        self.setWindowTitle(self.dbname)
        self.tableBox.clear()
        self.tableBox.addItems(self.db.tables())
    
    def on_box(self):
        query = QSqlQuery(self.queryBox.currentText())
        self.model.setQuery(query)
        self.statusBar().showMessage(query.lastError().text())
        self.view.resizeRowsToContents()
        
    def on_table_box(self,value):
        self.model.setTable(value)
        self.model.select()
 
    def contextMenuEvent(self,event):
        pos = self.view.mapToGlobal(event.pos())
        mnu = QMenu()
        mnu.setFont(self.font())
        mnu.addAction('Открыть базу данных').setObjectName('open')
        mnu.addAction('Добавить запись').setObjectName('add')
        mnu.addAction('Удалить запись').setObjectName('del')
        ret = mnu.exec_(pos)
        if not ret: 
            return
        obj = ret.objectName()
        if obj == 'open':
            self.open_dbname()
        if obj == 'add':
            row = self.model.rowCount()
            self.model.insertRow(row)
            self.model.setData(self.model.index(row,0),None)
            self.model.submit()
        elif obj == 'del':
            idx = self.view.currentIndex()
            self.model.removeRow(idx.row())
            self.model.submit()
        self.view.setCurrentIndex(self.model.index(-1,-1))
        
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    w = View()
    w.setFont(QFont('times',18))
    w.resize(800,600)
    w.show()
    sys.exit(app.exec_())
Добавлено через 3 минуты
тут не все доделано но принцип ИМХО ясен
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2021, 13:43
Помогаю со студенческими работами здесь

OpenCV и Win32 открытие файла используя диалоговое окно
Доброго времени суток,я пишу курсовой проект и столкнулся с такой проблемой я использую библиотеку OpenCV ,для возможности манипуляций с...

Повторное открытие формы: форму, уже отображенную, нельзя отобразить как модальное диалоговое окно
Приветствую вас уважаемые ! Вот помогите пожалуйста решить! При повторном открытии формы выдает: Форму, уже отображенную,...

Копирование через диалоговое окно
Доброго времени суток! Помогите пожалуйста ув.знатоки VBA! Нужна процедурка, при запуске которой будет запускаться диалоговое окно выбора...

Открытие файла через диалоговое и последующее выполнение кода
Есть задача: нужно выбрать файл из списка, через диалоговое окно и по данным произвести интерполяцию, через библиотеку gsl, и вычисление...

Ввод в таблицу через диалоговое окно
разработать приложение, позволяющее при помощи диалогового окна создавать таблицу прием товара


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru