Форум программистов, компьютерный форум, киберфорум
Python: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
20 / 15 / 7
Регистрация: 03.10.2014
Сообщений: 94

PyQt5 QTableView + QSqlTableModel организовать поиск

27.04.2020, 19:22. Показов 6977. Ответов 1

Студворк — интернет-сервис помощи студентам
Доброго времени суток, уважаемые.
Имеется БД (sqlite3) с одной таблицей (колонки fullname(PK) и tasks). В целях самообразования решил написать "морду" на PyQt5 с функцией поиска строки в QTableView. Так же на форме имеем QLineEdit и кнопку "Поиск". Ума не приложу, что повесить на кнопку поиска, чтобы можно было найти строку с Ф.И.О. в первой колонке и выделить эту строку.
Готового кода не прошу. Прошу помощи (подробного разъяснения). Заранее благодарю.
MainForm:
Кликните здесь для просмотра всего текста

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
#!/usr/bin/python3
# -*- coding:utf-8 -*-
 
import sys
import Ui_MainForm
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtSql import *
 
 
class MainForm(QMainWindow, Ui_MainForm.Ui_MainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.setupUi(self)
 
        self.db = QSqlDatabase.addDatabase('QSQLITE')
        self.db.setDatabaseName('testbase.db')
        self.db.open()
 
        self.model = QSqlTableModel()
        self.model.setTable('main_table')
        self.model.setEditStrategy(QSqlTableModel.OnManualSubmit)
        self.model.select()
 
        self.model.setHeaderData(0, Qt.Horizontal, 'Ф.И.О.')
        self.model.setHeaderData(1, Qt.Horizontal, 'Примечания')
        self.tableView.setModel(self.model)
 
        self.pushButton_quit.clicked.connect(qApp.quit)
        self.pushButton_search_fullname.clicked.connect(self.search_fullname)
 
    def search_fullname(self):
        pass
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MainForm()
    win.show()
    sys.exit(app.exec_())


Ui_MainForm:
Кликните здесь для просмотра всего текста

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
# -*- coding: utf-8 -*-
 
# Form implementation generated from reading ui file 'MainForm.ui'
#
# Created by: PyQt5 UI code generator 5.14.2
#
# WARNING! All changes made in this file will be lost!
 
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
 
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(515, 361)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setObjectName("widget")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.widget)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.gridLayout_2 = QtWidgets.QGridLayout()
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label_fullname = QtWidgets.QLabel(self.widget)
        self.label_fullname.setObjectName("label_fullname")
        self.horizontalLayout.addWidget(self.label_fullname)
        self.lineEdit_fullname = QtWidgets.QLineEdit(self.widget)
        self.lineEdit_fullname.setObjectName("lineEdit_fullname")
        self.horizontalLayout.addWidget(self.lineEdit_fullname)
        self.pushButton_search_fullname = QtWidgets.QPushButton(self.widget)
        self.pushButton_search_fullname.setObjectName("pushButton_search_fullname")
        self.horizontalLayout.addWidget(self.pushButton_search_fullname)
        self.gridLayout_2.addLayout(self.horizontalLayout, 0, 0, 1, 1)
        self.tableView = QtWidgets.QTableView(self.widget)
        self.tableView.setObjectName("tableView")
        self.gridLayout_2.addWidget(self.tableView, 1, 0, 1, 1)
        self.pushButton_quit = QtWidgets.QPushButton(self.widget)
        self.pushButton_quit.setObjectName("pushButton_quit")
        self.gridLayout_2.addWidget(self.pushButton_quit, 2, 0, 1, 1)
        self.gridLayout_3.addLayout(self.gridLayout_2, 0, 0, 1, 1)
        self.gridLayout.addWidget(self.widget, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
 
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        MainWindow.setTabOrder(self.lineEdit_fullname, self.pushButton_search_fullname)
        MainWindow.setTabOrder(self.pushButton_search_fullname, self.tableView)
        MainWindow.setTabOrder(self.tableView, self.pushButton_quit)
 
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Test QTableView search"))
        self.label_fullname.setText(_translate("MainWindow", "Ф.И.О."))
        self.pushButton_search_fullname.setText(_translate("MainWindow", "Поиск"))
        self.pushButton_quit.setText(_translate("MainWindow", "Выход"))


Скрин:
Миниатюры
PyQt5 QTableView + QSqlTableModel организовать поиск  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2020, 19:22
Ответы с готовыми решениями:

PyQt5. как получить все значения в строке в QTableView?
Всем доброго времени суток, не могли бы помочь, как получить данные всей строки в таблице при нажатии на нее в QTableView?

QTableView и QSqlTableModel
Пытаюсь вывести в QTableView модель из QSqlTableModel. Буквально на пол секунды в TableView появляется нужное содержимое, и тут же...

Отображение QSqlTableModel в QTableView
Всем привет. Знатоки, поделитесь опытом) Есть такая ф-я, которая отображает в QTableView объект QSqlTableModel. В этом QTableView ...

1
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
28.04.2020, 13:50
стандартно - setFilter
https://doc.qt.io/qtforpython/... .setFilter
можно в вьюхе делегат приделать чтобы модель не трогать
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
from PyQt5.QtWidgets import QListView,QTableView, QItemDelegate,QApplication
from PyQt5.QtGui import QStandardItemModel,QStandardItem, QBrush
from PyQt5.QtCore import Qt
from random import randint
 
 
class Delegate(QItemDelegate):
    def __init__(self):
        super().__init__()
        self.filter = ''
 
    def paint(self,painter,option,index):
        row, col, txt = index.row(), index.column(), index.data()
        if self.filter and self.filter in txt:
            painter.setBrush(QBrush(Qt.yellow))
            painter.drawRect(option.rect)     
        self.drawDisplay(painter,option,option.rect,txt)
 
 
class View(QTableView):
    def __init__(self):
        super().__init__()
        self.model = QStandardItemModel()
        self.setSelectionMode(1)
        for row in range(5):
            for col in range(5):
                tmp = str(randint(10000,20000))
                item = QStandardItem(tmp)
                self.model.setItem(row,col,item)
        self.setModel(self.model)
        d = Delegate()
        self.setItemDelegate(d)
        d.filter = '8'
 
 
if __name__ == "__main__":
    app = QApplication([])
    w = View()
    w.resize(600,400)
    w.show()
    app.exec_()
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.04.2020, 13:50
Помогаю со студенческими работами здесь

завсисимость полей в QtableView + QSqlTableModel
Товарищи суть такая. Работаю с использованиеем связки QtableView + QSqlTableModel. Подскажите как можно организовать такую вещь,...

QSqlTableModel и QTableView, удаление строк
Добрый вечер, уважаемые программисты. Столкнулся с непонятным поведением удаления строк. Помогите пожалуйста разобраться с проблемой. ...

QSqlTableModel + QTableView + Drag&Drop
Привет. Делаю реализацию перемещения строк на QTableView с моделью QSqlTableModel. Буду в этой теме спрашивать нужное. Пока такой вопрос...

QTableView + QSqlTableModel ( не получается применить изменения в bd )
При вызове диалога создаю и настраиваю TableView и модель: m_pTableStUs = new QTableView(); m_pModel = new QSqlTableModel( 0,...

QSqlTableModel + QTableView + кастомный делегат QComboBox
Пытаюсь реализовать кастомного делегата на основе QComboBox. Получилось отчасти. 1) При щелчке на ячейке в колонке с делегатом (у меня...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru