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

Не убираются лишние символы из списка

08.01.2017, 00:46. Показов 4919. Ответов 21

Студворк — интернет-сервис помощи студентам
Опишу задачу. Нужно из SQL БД вытянуть 2 столбца. Один это ID (Primary key), второй просто текст название группы.
1) Делаю запрос к БД
Python
1
cur.execute('''select Group_Name  From  GTable''')
Помещаю результат в список
Python
1
listGetGroup = cur.fetchall()
Нужно вытянуть все ID
2) Делаю запрос к БД
Python
1
cur.execute('''select primari_id  From  GTable''')
Помещаю результат в список
Python
1
listPrimariID = cur.fetchall()
Через цикл for вывожу содержимое SQL таблицы в таблицу на форме.
Python
1
2
3
4
5
        
for elem in listGetGroup:
       print(elem)#Выводит в консоль ('название группы',)
       elem = " ".join(elem)
       print(elem)
Цикл отрабатывает без ошибок, выводит все названия групп из SQL таблицы нам на форму.

Второй цикл точно такой же, только выводит ID группы.
Python
1
2
3
4
5
        
for elem in listPrimariID :
       print(elem)#Выводит в консоль ('1',)
       elem = " ".join(elem)
       print(elem)
Он у меня выпадает с ошибкой:
Python
1
2
    elem = " ".join(elem)
TypeError: sequence item 0: expected str instance, int found
Можно преобразовать elem в строку, удалить все скобки, кавычки. Но с функцией join() быстрей и меньше кода.
Да и для себя интересно разобраться почему одинаковый код по разному себя ведет???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.01.2017, 00:46
Ответы с готовыми решениями:

Как убрать лишние символы при выводе в консоль списка файлов?
Поясните, пожалуйста. Собираю кроссплатформенные методы, для работы с файлами. Взял для разбора такой метод. Всё работает, только вот...

Не убираются маркеры у списка
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Отель</title> <link rel="stylecheet" href="style.css"> ...

Лишние символы
Всем привет. Компилятор пишет что есть лишние символы в infostr db 'Type the password, please',0dh,0ah,'$' good db...

21
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
08.01.2017, 01:03
немного не по теме, но почему отдельно тяните id и название группы?
0
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
08.01.2017, 01:08  [ТС]
Jabbson, Я питон учу недавно на примерах, из инета. Я сначала задумался в одном запросе вытянуть все данные. Получу я двумерный массив и как его разделить? На два столбика ID и имя группы
Python
1
('ID', 'название группы')
Пришел к тому что через два запроса легче.
Покажи пример как бы ты сделал выгрузку из SQL на форму QTableWidget
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
08.01.2017, 01:16
Цитата Сообщение от lepus007 Посмотреть сообщение
Пришел к тому что через два запроса легче.
Вообще не легче

Python
1
2
3
4
5
6
7
groups = cur.fetchall()
 
for group in groups:
    gid = group[0]
    gname = group[1]
 
    print('id: {}, name: {}'.format(gid, gname))
Добавлено через 37 секунд
или даже:

Python
1
2
3
4
groups = cur.fetchall()
 
for group in groups:
    print('id: {}, name: {}'.format(*group))
1
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
08.01.2017, 04:39  [ТС]
Jabbson, Спасибо, задача решена. Хоть запись такого типа не очень красива. Если таблица будет большая, то после каждого присваивания нужно будет вставлять инкремент. Интуиция подсказывает что должен быть способ более грамотней.
Python
1
2
3
4
5
6
7
8
9
10
11
groups = cur.fetchall()
 intNum = 0
for group in groups:
    gid = group[intNum ]
    intNum +=1
    gname = group[intNum]
    intNum +=1
    gsecond_name = group[intNum]
    intNum +=1
 
    и т.д ....
И все же почему мой второй цикл выпадал с ошибкой??? Просто для себя интересно.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
08.01.2017, 05:28
Цитата Сообщение от lepus007 Посмотреть сообщение
groups = cur.fetchall()
*intNum = 0
for group in groups:
* * gid = group[intNum ]
* * intNum +=1
* * gname = group[intNum]
* * intNum +=1
* * gsecond_name = group[intNum]
* * intNum +=1
OMG, что это вообще?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
08.01.2017, 07:10
Лучший ответ Сообщение было отмечено lepus007 как решение

Решение

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
import sys
import sqlite3
from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QVBoxLayout
 
 
class App(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.title = 'Your sql table'
        self.initUI()
 
    def initUI(self):
        self.setWindowTitle(self.title)
        self.create_table()
 
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tableWidget)
        self.setLayout(self.layout)
        self.show()
 
    def get_sql_data(self, dbname):
        conn = sqlite3.connect(dbname)
        cur = conn.cursor()
        cur.execute('SELECT * FROM GTable')
        rows = cur.fetchall()
        return rows
 
    def create_table(self):
        self.tableWidget = QTableWidget()
        rows = self.get_sql_data('somedb.db')
 
        self.tableWidget.setRowCount(len(rows))
        self.tableWidget.setColumnCount(len(rows[0]))
 
        self.tableWidget.verticalHeader().setVisible(False)
        self.tableWidget.setHorizontalHeaderLabels(['id', 'name'])
 
        for index, row in enumerate(rows):
            for i, c in enumerate(row):
                self.tableWidget.setItem(index, i, QTableWidgetItem(str(c)))
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
08.01.2017, 07:44
или

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
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTableView, QVBoxLayout
from PyQt5 import QtCore
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel
 
 
class App(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.title = 'Your sql table'
        self.initUI()
 
    def initUI(self):
        self.setWindowTitle(self.title)
        self.create_table()
 
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tableView)
        self.setLayout(self.layout)
        self.show()
 
    def initializeModel(self, model):
        model.setTable('GTable')
        model.setEditStrategy(QSqlTableModel.OnFieldChange)
        model.select()
        model.setHeaderData(0, QtCore.Qt.Horizontal, "ID")
        model.setHeaderData(1, QtCore.Qt.Horizontal, "NAME")
 
    def create_table(self):
        db = QSqlDatabase.addDatabase('QSQLITE')
        db.setDatabaseName('somedb.db')
        self.model = QSqlTableModel()
 
        self.initializeModel(self.model)
        self.tableView = QTableView()
        self.tableView.verticalHeader().hide()
        self.tableView.setModel(self.model)
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())
0
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
08.01.2017, 21:38  [ТС]
Возникла следующая проблема.
Я хочу в таблицу в последнюю колонку поместить ChekBox. Использовать для удаления записи.
Как создать через цикл много ChekBox`в?
Python
1
2
3
4
5
6
7
        for index, row in enumerate(rows):
            self.cb = QtWidgets.QCheckBox()
            print(str(self.cb))
            self.cb.setObjectName("ggg")
            for i, c in enumerate(row):
                self.tableWidget.setItem(index, i, QTableWidgetItem(str(c)))
                self.tableWidget.setCellWidget(index, 2, self.cb)
Работает только последний чекбокс. Потому что нужно создавать ссылку екзмпляра с уникальным именем. А у меня через цикл не получается((. Подскажите как это реализовать?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
09.01.2017, 01:08
Пока не понял зачем там уникальные имена...

Python
1
2
3
4
5
        for index, row in enumerate(rows):
            for i, c in enumerate(row):
                self.tableWidget.setItem(index, i, QTableWidgetItem(str(c)))
            self.cb = QCheckBox()
            self.tableWidget.setCellWidget(index, len(row), self.cb)
0
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
09.01.2017, 11:25  [ТС]
А как к ним обращаться ? Понимать какой из чекбоксов активен?

Добавлено через 11 минут
Python
1
self.cb = QtWidgets.QCheckBox()
Я также добавлял чекбоксы. но работал у меня только последний.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
09.01.2017, 13:12
Цитата Сообщение от lepus007 Посмотреть сообщение
А как к ним обращаться ? Понимать какой из чекбоксов активен?
Ты когда их создаешь, ты должен созданные объекты сохранять например в список (чтобы gc потом неожиданно не удалил объект + ты сам же сможешь опять с ними работать) и потом с дальнейшей работе ты сможешь в любой момент пробежаться по списку и посмотреть какие элементы установлены в какое положение.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
09.01.2017, 16:47
Лучший ответ Сообщение было отмечено lepus007 как решение

Решение

Да можно без сохранения пробежаться даже

Python
1
2
        ids2del = [self.tableWidget.item(row, 0).text() for row in range(self.tableWidget.rowCount())
                   if self.tableWidget.cellWidget(row, 2).checkState() == 2]
и вот есть лист id, которые нужно удалить из базы.
1
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
09.01.2017, 19:39  [ТС]
Почему то ругается на эту строчку.
Python
1
self.tableWidget.cellWidget(row, 2).checkState()
Из консоли
Python
1
2
    print(self.tableWidget.cellWidget(0, 2).checkState())
AttributeError: 'QWidget' object has no attribute 'checkState'
alex925 Приведи пример как добавить в список объект и из списка обратится к нему??

Добавлено через 1 час 22 минуты
Вот так получилось со списком.
Python
1
list1.append(self.cb)
Python
1
2
3
4
    def rex(self):
        for cb1 in list1:
            if cb1.isChecked():
                print("true")
Ток не могу определить какие чекс боксы активны. Какие строки из таблици нужно удалить.
Как определить в какой строчке таблицы чекбокс активен? Или через индекс списка? Например если 5 елемент списка true значить 5 строчку в таблице делейт???
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
09.01.2017, 21:27
цикл по rows таблицы, и там где cell c чекбоксом в состоянии 2 --> из этого же row брать первый элемент (primary_id), как я уже показал выше.
0
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
09.01.2017, 23:14  [ТС]
Python
1
self.tableWidget.cellWidget(row, 2).checkState()
У меня эта строчка ошибку выдает.
'QWidget' object has no attribute 'checkState'
Можно как то починить исправить??
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
10.01.2017, 00:10
Цитата Сообщение от lepus007 Посмотреть сообщение
Можно как то починить исправить??
у меня нет Вашего кода, я не вижу как Вы создали ячейки
0
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
10.01.2017, 13:20  [ТС]
По нажатию кнопки pushButton_3 запускаем функцию отлова активных чекбоксов.
Эта часть кода рабочая.
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
self.pushButton_3.clicked.connect(self.idDel)
 
    def idDel(self):
        ids2del = [self.tableWidget.item(row, 0).text() for row in range(self.tableWidget.rowCount())
                   if self.tableWidget.cellWidget(row, 2).checkState() == 2]
 
        print(ids2del)
 
    def create_table(self):
        rows = self.get_sql_data('SHOP_DB.db')
 
        self.tableWidget.setRowCount(len(rows))
        self.tableWidget.setColumnCount(3)
        self.tableWidget.verticalHeader().setVisible(False)
        self.tableWidget.setHorizontalHeaderLabels(['ID', 'Имя группы', 'Выбрать'])
        self.tableWidget.horizontalHeader().resizeSection(0, 100)
        self.tableWidget.verticalHeader().resizeSection(0, 35)
        self.tableWidget.horizontalHeader().resizeSection(1, 480)
        self.tableWidget.verticalHeader().resizeSection(1, 35)
        self.tableWidget.horizontalHeader().resizeSection(2, 100)
        self.tableWidget.verticalHeader().resizeSection(2, 35)
 
        for index, row in enumerate(rows):
            self.cb = QtWidgets.QCheckBox()
            list1.append(self.cb)
            for i, c in enumerate(row):
                self.tableWidget.setItem(index, i, QTableWidgetItem(str(c)))
                self.tableWidget.setCellWidget(index, 2, self.cb)
Но если я удалю
Python
1
list1.append(self.cb)
эту строчку. Код становится не рабочим. Не могу понять почему?
список list1 негде не используется кроме как добавляет ссылки и хранит их пока программа жива.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
10.01.2017, 13:56
У меня этот же код работает и без строки.
Кликните здесь для просмотра всего текста
0
0 / 0 / 0
Регистрация: 05.09.2015
Сообщений: 45
10.01.2017, 15:24  [ТС]
Удивительный этот язык Python.
Было так, не работало.
Python
1
2
3
4
5
for index, row in enumerate(rows):
            self.cb = QtWidgets.QCheckBox()
            for i, c in enumerate(row):
                self.tableWidget.setItem(index, i, QTableWidgetItem(str(c)))
                self.tableWidget.setCellWidget(index, 2, self.cb)

Сделал так, все заработало.
Python
1
2
3
4
5
        for index, row in enumerate(rows):
            for i, c in enumerate(row):
                self.tableWidget.setItem(index, i, QTableWidgetItem(str(c)))
            self.cb = QtWidgets.QCheckBox()
            self.tableWidget.setCellWidget(index, 2, self.cb)
Не как не пойму синтаксис этого языка. Может какую-то книгу посоветуете, где хорошо описан механизм этого языка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.01.2017, 15:24
Помогаю со студенческими работами здесь

Лишние символы в строке
#include <stdio.h> char getFullName(char *filename); int getSymbols(const char *filename); int main(void){ char filename; ...

Лишние символы в eval
Помогите! Срочно нужно написать программу, но не всё получается. Почему при использовании eval остаются лишние символы на вывод?Например:...

Лишние символы на выводе
Задача: в строке заменить плюсы на минусы. Вроде всё выполняется нормально, но за результатом выводятся не нужные мне символы ...

Лишние символы в файле
При запуске программа кроме заданного текста вводит в начале файла символ "(" , что делать? uses dos,crt,wincrt; var f: file of string;...

Убрать лишние символы
Доброго времени суток! Ссылки имеют такой вид: viewforum.php?f=ххх, вместо ххх цифры (id раздела). Страницу, например viewforum.php?f=87...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА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
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru