Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 6, 2019 14:28:02

nick789
Зарегистрирован: 2016-09-21
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

ListBox сохранение и загрузка в файл

Как вариант, сохраняю так.

 from tkinter import *
...
    tmpFileName = "111111111.tmp"
    try:
        f = open(tmpFileName, 'w')
    except:
        return 
    list1_karteg=listbox1.get(0, END)
    string1 = ''
    for i in list1_karteg: # Соединяем в строку
        string1 += str(i) + '\n'
    string1 = string1.rstrip('\n') 
    f.write(string1)
    f.close()

Получаю файл с таким содержимым:
(200, 104, 0, 276, 182, 64, 76, 78)
(316, 158, 0, 448, 245, 124, 132, 87)
(505, 211, 0, 586, 274, 189, 81, 63)
(657, 251, 0, 708, 290, 249, 51, 39)
(809, 263, 0, 892, 320, 313, 83, 57)

Сам ListBox :
200 104 0 276 182 64 76 78
316 158 0 448 245 124 132 87
505 211 0 586 274 189 81 63
657 251 0 708 290 249 51 39
809 263 0 892 320 313 83 57

Пробую загрузить:
     tmpFileName = "111111111.tmp"
    try:
        f = open(tmpFileName, 'r') # Открывает файл для чтения
    except:
        return
    list1_karteg = f.read() # Читает файл
    f.close() # Закрыть дескриптор файла
    list1_karteg = list1_karteg.split('\n') 
    for i in list1_karteg:
        listbox1.insert(END,i)

Получаю в ListBox
(200, 104, 0, 276, 182, 64, 76, 78)
(316, 158, 0, 448, 245, 124, 132, 87)
(505, 211, 0, 586, 274, 189, 81, 63)
(657, 251, 0, 708, 290, 249, 51, 39)
(809, 263, 0, 892, 320, 313, 83, 57)

А должно быть:
200 104 0 276 182 64 76 78
316 158 0 448 245 124 132 87
505 211 0 586 274 189 81 63
657 251 0 708 290 249 51 39
809 263 0 892 320 313 83 57

Что можно придумать ?

Отредактировано nick789 (Фев. 6, 2019 14:36:37)

Офлайн

#2 Фев. 6, 2019 15:54:49

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

ListBox сохранение и загрузка в файл

nick789 ой шото вы темните, если действительно

nick789
Сам ListBox :
200 104 0 276 182 64 76 78
316 158 0 448 245 124 132 87
505 211 0 586 274 189 81 63
657 251 0 708 290 249 51 39
809 263 0 892 320 313 83 57
то listbox1.get(0, END) вернет
('200 104 0 276 182 64 76 78', ‘316 158 0 448 245 124 132 87’, ‘505 211 0 586 274 189 81 63’, ‘657 251 0 708 290 249 51 39’, ‘809 263 0 892 320 313 83 57’)
соответственно :
 list1_karteg = ('200 104 0 276 182 64 76 78',
                '316 158 0 448 245 124 132 87',
                '505 211 0 586 274 189 81 63',
                '657 251 0 708 290 249 51 39',
                '809 263 0 892 320 313 83 57',)
string1 = ''
for i in list1_karteg:
    string1 += str(i) + '\n'
string1 = string1.rstrip('\n')
print(string1)
>>> 
200 104 0 276 182 64 76 78
316 158 0 448 245 124 132 87
505 211 0 586 274 189 81 63
657 251 0 708 290 249 51 39
809 263 0 892 320 313 83 57
>>> 
ровно тоже самое будет и в текстовом файле.
Откуда у вас в текстовом файле скобки и запятые, из представленого вами кода понять не представляется возможным.
nick789
Как вариант, сохраняю так.
Очевидно что сохраняете вы вовсе не так, и гдето еще присутствует еще один кусок кода котороый пересохраняет поверх вашего сохраненного файла уже по своему.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Фев. 6, 2019 15:59:47)

Офлайн

#3 Фев. 7, 2019 07:28:50

nick789
Зарегистрирован: 2016-09-21
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

ListBox сохранение и загрузка в файл

Прицепил картинку. Слева файл в редакторе, его время создание. Файл для проверки пересоздавал.
Справа сам ListBox.

В код добавил :

     list1_karteg=listbox1.get(0, END)
    print("prov ", list1_karteg)
prov  ((807, 219, 0, 949, 323, 65, 142, 104), (992, 323, 0, 1140, 422, 120, 148, 99), (1232, 401, 0, 1310, 484, 176, 78, 83), (1232, 487, 0, 1319, 586, 230, 87, 99))

Циферки в консоли другие, так как эту проверку делал после картинки, пришлось на создавать другие значения.

Пробую преобразовать:
 list1_karteg = f.read()
...    
for i in list1_karteg:
        print("type_2 ", type(i))   #  type_2  <class 'str'>
        print("444 ", i)
        x=i[1:-1]
        x=x.split(", ")
        print("x ", x)
        y = [-1, -1, 0,   -1, -1,     -1,      -1, -1]
        for k in [0, 1, 2, 3, 4, 5, 6, 7]:
            y[k]=int(x[k])
        print("type_3 ", type(y))
        print("555 ", y)
        listbox1.insert(END,y)
type_2  <class 'str'>
444  (1232, 487, 0, 1319, 586, 230, 87, 99)
x  ['1232', '487', '0', '1319', '586', '230', '87', '99']
type_3  <class 'list'>
555  [1232, 487, 0, 1319, 586, 230, 87, 99]

Руки мне отрывать не надо. Но больше ничего не придумал. Если есть идеи ?

Отредактировано nick789 (Фев. 7, 2019 09:14:22)

Прикреплённый файлы:
attachment 333.jpg (144,7 KБ)

Офлайн

#4 Фев. 7, 2019 09:49:12

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

ListBox сохранение и загрузка в файл

nick789
Руки мне отрывать не надо. Но больше ничего не придумал. Если есть идеи ?
Есть конечно, вопрос как у вас листбокс заполняется изначально? что там за данные? есть подозрение что там изначально не строки, а кортежи, в таком случае в самом листбоксе запятые и скобочки не отображаются, видны только цифры\буквы, но когда вы делаете str(кортеж) то оно вам возвращает строку с запятыми и скобочками, которые вы запихиваете в файл как есть с блекджеком скобками и зарпятыми, тут все правильно. А вот когда вы считываете из файла, то считываете просто строки, и пихаете их в листбокс как есть, вот он вам и отображает все как есть с скобками и запятыми. Чтобы этого не происходило нужно при считывании из файла строку обратно преобразовать в кортеж:
 from ast import literal_eval
.....
    listbox1.insert(END,literal_eval(i))
либо же не сохранять данные в виде просто текста, а использовать сериализацию, pickle например или JSON



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Фев. 7, 2019 09:51:48)

Офлайн

#5 Фев. 7, 2019 10:10:00

nick789
Зарегистрирован: 2016-09-21
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

ListBox сохранение и загрузка в файл

список отправляю в listbox

Офлайн

#6 Фев. 7, 2019 10:36:21

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

ListBox сохранение и загрузка в файл

nick789
список отправляю в listbox
ну так и при чтении из файла нужно строки превращать в список\кортеж перед “отправкой” в листбокс.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version