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

Поиск по таблице

27.06.2022, 16:01. Показов 1184. Ответов 6

Студворк — интернет-сервис помощи студентам
Привет, не так давно решил попробовать поработать с PyQt5 b Qt Desinger и сделать таблицу с поиском, однако столкнулся с проблемой, при введении текста в поисковую строку QLineEdit код срабатывает, но поиска не происходит, перепробовал все варианты, буду безгранично рад за помощь!!!
P.S. под прилагается

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
from re import I
from PyQt5 import QtCore, QtGui, QtWidgets
 
 
 
class Ui_MainWindow(QtWidgets.QMainWindow):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1920, 1000)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(10, 40, 131, 20))
        self.lineEdit.setStyleSheet(" QLineEdit {\n"
"\n"
"     border-radius: 10px;\n"
"     padding: 0 8px;\n"
"\n"
"     selection-background-color: darkgray;\n"
" }\n"
" QLineEdit[echoMode=\"2\"] {\n"
"     lineedit-password-character: 9679;\n"
" }")
        self.lineEdit.setInputMask("")
        self.lineEdit.setText("")
        self.lineEdit.setObjectName("lineEdit")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 10, 81, 20))
        self.label.setStyleSheet("font: 14pt \"Segoe UI\";")
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(10, 70, 81, 20))
        self.label_2.setStyleSheet("font: 14pt \"Segoe UI\";")
        self.label_2.setObjectName("label_2")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(10, 100, 131, 20))
        self.lineEdit_2.setStyleSheet(" QLineEdit {\n"
"\n"
"     border-radius: 10px;\n"
"     padding: 0 8px;\n"
"\n"
"     selection-background-color: darkgray;\n"
" }\n"
" QLineEdit[echoMode=\"2\"] {\n"
"     lineedit-password-character: 9679;\n"
" }")
        self.lineEdit_2.setInputMask("")
        self.lineEdit_2.setText("")
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.lineEdit_2.textChanged.connect(self.search)
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(10, 180, 84, 23))
        self.pushButton.setStyleSheet("QPushButton {\n"
"    font: 14pt \"Segoe UI\";\n"
"\n"
"     border-radius: 6px;\n"
"     background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\n"
"                                       stop: 0 #f6f7fa, stop: 1 #dadbde);\n"
"     min-width: 80px;\n"
" }\n"
"\n"
" QPushButton:pressed {\n"
"     background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\n"
"                                       stop: 0 #dadbde, stop: 1 #f6f7fa);\n"
" }\n"
"\n"
" QPushButton:flat {\n"
"     border: none; /* для плоской кнопки границы нет */\n"
" }\n"
"\n"
" QPushButton:default {\n"
"     border-color: navy; /* делаем кнопку по умолчанию выпуклой */\n"
" }\n"
" QPushButton:open { /* когда собственное меню кнопки раскрыто */\n"
"     background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\n"
"                                       stop: 0 #dadbde, stop: 1 #f6f7fa);\n"
" }\n"
"\n"
" QPushButton::menu-indicator {\n"
"     image: url(menu_indicator.png);\n"
"     subcontrol-origin: padding;\n"
"     subcontrol-position: bottom right;\n"
" }\n"
"\n"
" QPushButton::menu-indicator:pressed, QPushButton::menu-indicator:open {\n"
"     position: relative;\n"
"     top: 2px; left: 2px; /* сдвигаем стрелку на 2 px */\n"
" }")
        self.pushButton.setObjectName("pushButton")
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(200, 0, 1720, 1000))
        Row = 10000
        Col = 7
        self.tableWidget.setRowCount(Row)
        self.tableWidget.setColumnCount(Col)
        self.tableWidget.setObjectName("tableWidget")
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(4, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(5, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(6, item)
        self.tableWidget.horizontalHeader().setDefaultSectionSize(237)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1920, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
 
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        
        
        
        
 
 
        for c in range(0, Col):
            for r in range(0, Row):
                i =  QtWidgets.QTableWidgetItem(item)
                self.tableWidget.setItem(c, r, i)
                
    def search(self, s):
        # Очистите текущий выбор.
        self.tableWidget.setCurrentItem(None)
 
        matching_items = self.tableWidget.findItems(QtWidgets.QTableWidgetItem(), [QtCore.Qt.MatchContains])
        if matching_items:
            # Мы кое-что нашли.
            item = matching_items[0]  # Возьмите первый.
            self.tableWidget.setCurrentItem(item)
        
 
            
 
 
 
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Поиск 1"))
        self.label_2.setText(_translate("MainWindow", "Поиск 2"))
        self.pushButton.setText(_translate("MainWindow", "Старт"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "Регион"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("MainWindow", "Адрес"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("MainWindow", "Предприятие"))
        item = self.tableWidget.horizontalHeaderItem(3)
        item.setText(_translate("MainWindow", "Ассортимент"))
        item = self.tableWidget.horizontalHeaderItem(4)
        item.setText(_translate("MainWindow", "Количество"))
        item = self.tableWidget.horizontalHeaderItem(5)
        item.setText(_translate("MainWindow", "Результат"))
        item = self.tableWidget.horizontalHeaderItem(6)
        item.setText(_translate("MainWindow", "Примечание"))
 
 
            
 
 
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.06.2022, 16:01
Ответы с готовыми решениями:

Линейный поиск в неупорядоченной таблице без барьера, двоичный поиск, поиск в двоичном дереве
Помогите пожалуйста написать программу, которая позволяет подсчитать, сколько раз в текстовом файле(ах) встретилось каждое из слов,...

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

Поиск записей в одной таблице, где значения ключевого поля не совпадают с полем в другой таблице
Имеется Access XP, надо создать запрос для поиска записей в таблице ТОВАРЫ,где значения ключевого поля (Артикул) не совпадают со значениями...

6
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
27.06.2022, 16:32
Nicolas_227, поиск работает, просто ты ищешь какой то бред по условию:
Python
1
2
3
4
def search(self, s):
    items = QtWidgets.QTableWidget.findItems(s, QtCore.Qt.MatchContains)
    if items: 
        self.tableWidget.setCurrentItem(items[0])
0
0 / 0 / 0
Регистрация: 27.06.2022
Сообщений: 3
27.06.2022, 17:14  [ТС]
а в переменную s тогда что вносить?
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 937
28.06.2022, 12:25
Цитата Сообщение от Nicolas_227 Посмотреть сообщение
а в переменную s тогда что вносить?
То что ищете.
0
0 / 0 / 0
Регистрация: 27.06.2022
Сообщений: 3
28.06.2022, 21:37  [ТС]
В том и дело, что нужен поиск после заполнения таблицы, логика, которая за это отвечает

Code
1
i =  QtWidgets.QTableWidgetItem(s)
она должна взять аргумент s
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
29.06.2022, 09:22
Nicolas_227, зачем тебе программирование, если даже сформулировать вопрос/идею/проблемы нет умения?
Правильный ответ уже дали, если не доходит, то подскажу, что вместо "s" должен быть текст, текст из какого то из lineEdit, разбираться в говнокоде желания нет.
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 937
29.06.2022, 11:38
Nicolas_227, приводите минимально воспроизводимый пример с проблемой и вам быстрее помогут.
Так?

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
from PyQt5.QtWidgets import QTableWidget, QLineEdit, QPushButton, QApplication, QMainWindow, QVBoxLayout, QWidget, QTableWidgetItem
from PyQt5.QtCore import Qt
 
import random, string, sys
 
 
class MainWindow(QMainWindow):
 
    def __init__(self):
        super().__init__()
 
        self.query = QLineEdit()
        self.query.setPlaceholderText("Поиск...")
        self.query.textChanged.connect(self.search)
 
        n_rows = 50
        n_cols = 4
 
        self.table = QTableWidget()
        self.table.setRowCount(n_rows)
        self.table.setColumnCount(n_cols)
 
        for c in range(0, n_cols):
            for r in range(0, n_rows):
                s = ''.join(random.choice(string.ascii_lowercase) for n in range(10))
                i = QTableWidgetItem(s)
                self.table.setItem(c, r, i)
 
        layout = QVBoxLayout()
        layout.addWidget(self.query)
        layout.addWidget(self.table)
 
        w = QWidget()
        w.setLayout(layout)
        self.setCentralWidget(w)
 
    def search(self, s):
        self.table.setCurrentItem(None)
        if not s:
            return
        matching_items = self.table.findItems(s, Qt.MatchContains)
        if matching_items:
            item = matching_items[0]  
            self.table.setCurrentItem(item)
 
 
app = QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()
Добавлено через 3 минуты
PS. Пример просто загуглил)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.06.2022, 11:38
Помогаю со студенческими работами здесь

Поиск значения в таблице StringGrid (в неупорядоченной таблице)
Здравствуйте! Очень нужна помощь! Есть таблица StringGrid1 с данными( номер, ФИО, возраст, образование и т.п.). Нужно организовать поиск...

Прямой поиск в строке и поиск в таблице
1)сделать прямой поиск в строке и оформить как функцию программа вот: Program n10;var s,x: string; i,j,n,m: integer; f: boolean; ...

Поиск в таблице БД
Добрый день, нужна ваша помощь! Нужно организовать поиск в таблице только по тем параметрам, которые выбраны. Если параметр не выбран то...

Поиск по таблице
Есть таблица в которой записываются различные данные включая мониторы. Есть запрос, но он работает некорректно.. в поле бывает указано...

Поиск в таблице
На форме есть datagridview в которой отображается таблица с акцесс, необходимо произвести поиск по столбцу(столбец выбирает пользователь),...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru