Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 27, 2016 19:36:18

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

Условия if else

Вот:

# -*- coding: utf-8 -*-
from Tkinter import *
from  ConfigParser import ConfigParser
import os
def cfg_r():
    config = ConfigParser()
    config.read("tree_settings.ini")
    wl = config.get('settings','wl')
    hl = config.get('settings','hl')
    if os.path.exists('tree_settings.ini') and 799 < int(config.get('settings','wl')) < 1921 and 599 < int(config.get('settings','hl')) < 1081:
        print('okokok')
    else:
         cfg_def()
def cfg_def():
    config = ConfigParser()
    config.read("tree_settings.ini")
    config.set('settings','wl','800')
    config.set('settings','hl','600')
    with open("tree_settings.ini", 'w') as configfile:
        config.write(configfile)
def cfg_s():
    print('save param')
def root_w_destroy():
    cfg_s()
    root.destroy()
root = Tk()
root.protocol('WM_DELETE_WINDOW', root_w_destroy)
root.geometry(wl+'x'+hl)
root.minsize(800,600)
root.maxsize(1920,1080)
root.mainloop()



Офлайн

#2 Июнь 27, 2016 19:43:37

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Условия if else

Вы хотите в с использованием конфига .ini конфигурировать рабочее приложение?
Вообще, конечно, я бы так не делал. Проще было бы дать минимально разумные размеры и возможность для ручного конфигурирования с запоминанием положения. Хотя ситуации бывают разные, но это сильно усложняет приложение.

Для решения задачи в таком формате есть несколько вариантов, но все они с ООП

Офлайн

#3 Июнь 27, 2016 20:01:49

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

Условия if else

Я просто учусь. В данном случае не могу разобраться с последовательностью присвоений переменных.

Вот например тут ругается "UnboundLocalError: local variable ‘config’ referenced before assignment" :

def cfg_r():
    if os.path.exists('tree_settings.ini'):
        config = ConfigParser()
        config.read("tree_settings.ini")
        wl = config.get('settings','wl')
        hl = config.get('settings','hl')
    elif 799 < int(config.get('settings','wl')) < 1921 and 599 < int(config.get('settings','hl')) < 1081:
        print('okokok')
    else:
         cfg_def()
Хотя после проверки наличия файла, сразу присвоение.



Офлайн

#4 Июнь 27, 2016 21:40:12

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

Условия if else

Так работает. осталось записывать состояние при закрытии и кроме размеров, указать и положение:

# -*- coding: utf-8 -*-
from Tkinter import *
from  ConfigParser import ConfigParser
import os
def cfg_read_file():
    if os.path.exists('tree_settings.ini'):
        cfg_read_settings()
    else:
        cfg_default()
            
def cfg_read_settings():
    config = ConfigParser()
    config.read("tree_settings.ini")
    wl = config.get('settings','wl')
    hl = config.get('settings','hl')
    if 799 < int(config.get('settings','wl')) < 1921 and 599 < int(config.get('settings','hl')) < 1081:
        pass
    else:
        cfg_default()
def cfg_default():
    file = open('tree_settings.ini', 'w')
    file.write('[settings]\nwl = 800\nhl = 600')
    file.close()
cfg_read_file()

Подскажите еще пожалуйста, после file.write нужно закрывать file.close()
Нужно ли это делать при config.get или config.set ?



Отредактировано Ubhra (Июнь 27, 2016 21:42:37)

Офлайн

#5 Июнь 27, 2016 22:16:19

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Условия if else

Луче использовать менеджер контекста with иначе придется самому контролировать открытие-закрытие.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version