0 / 0 / 0
Регистрация: 25.03.2021
Сообщений: 3
PyQt5

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

25.03.2021, 06:12. Показов 3781. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru