Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » tkinter (configarser, проверка чтение запись файла) [RSS Feed]

#1 Март 7, 2013 18:14:48

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

tkinter (configarser, проверка чтение запись файла)

Добрый день.
Только учусь.
Пытаюсь создать окно с параметрами из cfg файла (ширина, высота + фулскрин).
Окно создается всегда в центре экрана, размеры из cfg.
Пока не знаю как открывать окно развернутым (не на весь экран, а именно развернутым, но опять же по условию, если разрешение экрана не превысит 1980x1920).
Долго переставлял все с места на место. PyScripter пару раз при отладке зависал, даже раз винду повесил.
Пока что использую только то, что хоть частично, но понял.
Удаляет и создает cfg файл нормально. А вот попробовал руками записать в него в первое значение 10, а во второе 4000 (заведомо не верные) и винда сдохла.

from tkinter import *
from configparser import SafeConfigParser
import os
# перезапись конфиг файла
def rewrite():
    if os.path.exists('default.cfg'):
        cf = open('default.cfg')
        cf.close()
        os.remove('default.cfg')
        cf=open('default.cfg','w', encoding="utf-8")
        cf.write('[set_file]\ns_height=500\ns_width=800\ns_full=0')
        cf.close()
    else:
        cf=open('default.cfg','w', encoding="utf-8")
        cf.write('[set_file]\ns_height=500\ns_width=800\ns_full=0')
        cf.close()
# выход из программы
def quick_quit():
    mainframe.destroy()
mainframe = Tk()
mainframe.title("Name")
# чтение конфиг файла
mainframe.minsize(800,500)
mainframe.maxsize(1980,1020)
parser = SafeConfigParser()
parser.read('default.cfg')
# << проверка значений
if os.path.exists('default.cfg'):
    if 800 <= int(parser.get('set_file','s_width')) <= 1980:
        if 500 <= int(parser.get('set_file','s_height')) <= 1920:
            if 0 <= int(parser.get('set_file','s_full')) <= 1:
                pass
else:
    rewrite()
# << построение окна
parser.read('default.cfg')
mainframe_x = parser.get('set_file','s_width')
mainframe_y = parser.get('set_file','s_height')
mainframe_screen = parser.get('set_file','s_full')
mainframe_width = (mainframe.winfo_screenwidth() / 2 - int(mainframe_x) / 2)
mainframe_heigth = (mainframe.winfo_screenheight() / 2 - int(mainframe_y) / 2)
mainframe.geometry("%dx%d+%d+%d" % (int(mainframe_x), int(mainframe_y), mainframe_width, mainframe_heigth))
mainframe.mainloop()



Отредактировано Ubhra (Март 7, 2013 18:16:20)

Офлайн

#2 Март 7, 2013 18:46:26

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

tkinter (configarser, проверка чтение запись файла)

Вы очень сумбурно написали, но если я Вас правильно понял, то Вам необходимо вот-это:

mainframe.state("zoomed")
За счет maxsize и minsize Вы сможете регулировать размер развернутого окна (если оно Вам не надо во весь экран).
Если есть еще вопросы, напишите, пожалуйста, яснее :)



Отредактировано 4kpt (Март 7, 2013 18:49:32)

Офлайн

#3 Март 7, 2013 18:52:00

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

tkinter (configarser, проверка чтение запись файла)

Еще убила эта строка :)

if 0 <= int(parser.get('set_file','s_full')) <= 1:
И вот эти две строки зачем?
cf = open('default.cfg')
cf.close()



Отредактировано 4kpt (Март 7, 2013 18:55:26)

Офлайн

#4 Март 7, 2013 18:57:17

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

tkinter (configarser, проверка чтение запись файла)

Напишите, чего Вы в итоге хотите добиться?
Кроме того

def rewrite():
    if os.path.exists('default.cfg'):
        os.remove('default.cfg')
    cf=open('default.cfg','w', encoding="utf-8")
    cf.write('[set_file]\ns_height=500\ns_width=800\ns_full=0')
    cf.close()



Отредактировано 4kpt (Март 7, 2013 18:59:43)

Офлайн

#5 Март 7, 2013 19:03:17

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

tkinter (configarser, проверка чтение запись файла)

Спасибо.
Вставил в код, заработало.
# << построение окна

parser.read('default.cfg')
mainframe_x = parser.get('set_file','s_width')
mainframe_y = parser.get('set_file','s_height')
mainframe_screen = parser.get('set_file','s_full')
if int(mainframe_screen) == 1:
    mainframe.state('zoomed')
else:
    pass
Добиться хочу, что бы при запуске окна, оно значения брало из cfg файла (zumed, ширину, высоту)
А при закрытии записывало значения в файл (пока не дописал).
Проблема в основном в том, что бы проверять наличие файла, кодировку, валидность значений в диапазоне (в общем что cfg файл правильный) иначе затирать и писать новый с дефолтными значениями.
П.С. Та строка что убила, работает )))



Отредактировано Ubhra (Март 7, 2013 19:04:02)

Офлайн

#6 Март 7, 2013 19:08:04

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

tkinter (configarser, проверка чтение запись файла)

Строку, что убила, заменить на:

if int(parser.get('set_file','s_full')) in [0, 1]:



Офлайн

#7 Март 7, 2013 19:09:00

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

tkinter (configarser, проверка чтение запись файла)

Скиньте, мне, пожалуйста Ваш конфиг…



Офлайн

#8 Март 7, 2013 19:10:36

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

tkinter (configarser, проверка чтение запись файла)

Вот

[set_file]
s_height=500
s_width=800
s_full=1



Прикреплённый файлы:
attachment default.cfg (47 байт)

Офлайн

#9 Март 7, 2013 19:26:07

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

tkinter (configarser, проверка чтение запись файла)

Ubhra
Вы немного неправильно работаете с configparser.
Я уже разобрался по документации как надо работать.
Сейчас срочно убегаю. Нужно забрать подарок на 8 марта.
Напишу через 1,5 - 2 часа.
Хотите подождите, хотите - посмотрите решения завтра.



Офлайн

#10 Март 10, 2013 12:29:05

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

tkinter (configarser, проверка чтение запись файла)

Приношу свои извинения за несвоевременность…
За это привожу полное пояснение использования модуля ConfigParser.
Смотрите по этапам.

1. Импортируем модуль ConfigParser.

from ConfigParser import ConfigParser
2. Создаем экземпляр класса для последующего наполнения.
cfg = ConfigParser()
3. Создаем необходимые секции для отдельных параметров конфигурации.
cfg.add_section("root")
4. Заполняем секцию параметрами, которые необходимо сохранить.
Хотелось бы отметить, что можно использовать не именнованые, а позиционные параметры.
cfg.set(section="root", option="height", value="400")
cfg.set(section="root", option="width", value="400")
5. Открываем файл и сохраняем данные конфигурации.
with open("config_prg.ini" "w") as file_:
    cfg.write(file_)
Таким образом Вы получаете файл конфигурации, который могут использовать другие программы, которые написаны не только на python.

Обратная операция выполняется похожим образом :)

1. Создаем экземпляр класса для получения данных из конфигурационного файла.
cfg = ConfigParser()
2. Считываем данные с файла конфигурации напрямую!!!.
cfg.read("config_prg.ini")
3. Можем теперь получить данные из файла.
Акцентирую внимание, что возможно использование позиционных параметров.
cfg.get(section="root", option="width")
Поддерживаются следующие методы получения данных:
.get() - получение данных опции в виде строковой переменной;
.getint() - получение данных опции в виде целого числа;
.getfloat() - получение данных опции в виде дробного числа;
.getboolean() - получение данных опции в виде булевого числа (правда или ложь) - подходит Вам под последний параметр.
Надеюсь я все написал понятно. Переделывайте Ваш файл и выкладывайте. Я его, возможно, еще подпилю.

P.S. У меня python 2.X. Если у Вас 3.X то модуль необходимо называть так-же но без заглавных букв, т.е. название должно быть в малом регистре.



Отредактировано 4kpt (Март 11, 2013 20:12:19)

Офлайн

  • Начало
  • » GUI
  • » tkinter (configarser, проверка чтение запись файла)[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version