Найти - Пользователи
Полная версия: Не отрабатывает вложенный цикл
Начало » Python для новичков » Не отрабатывает вложенный цикл
1
ivsatel
Вложенный цикл на 66 строке отрабатывает только один раз. Не пойму почему?
import os
import configparser
from gi.repository import Gtk
class EQWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="EQ")
        self.connect("delete-event", Gtk.main_quit)
        self.set_size_request(250, 250)
        self.set_hexpand(False)
        self.set_border_width(10)
        try:
            config = configparser.ConfigParser()
            config.read('set-eq.ini')
            leq = config['EQ-Settings']['lasteq']
            self.mdict = leq.strip('[]').split(',')
        except:
            config = configparser.ConfigParser()
            config.add_section('EQ-Settings')
            config.set('EQ-Settings','lasteq','[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]')
            with open('set-eq.ini', 'w') as cfgfile:
                config.write(cfgfile)
            config.read('set-eq.ini')
            leq = config['EQ-Settings']['lasteq']
            self.mdict = leq.strip('[]').split(',')
        self.scale_n = {36:'-24', 35:'-23',34:'-22',33:'-21',32:'-20',31:'-19',
        30:'-18',29:'-17',28:'-16',27:'-15',26:'-14',25:'-13',24:'-12',23:'-11',
        22:'-10',21:'-9',20:'-8',19:'-7',18:'-6',17:'-5',16:'-4',15:'-3',
        14:'-2',13:'-1',12:'0',11:'1',10:'2',9:'3',8:'4',7:'5',6:'6',5:'7',
        4:'8',3:'9',2:'10',1:'11',0:'12'}
        self.grid = Gtk.Grid()
        self.add(self.grid)
        self.save_preset_eq = Gtk.Label('Сохранить имя настройки')
        self.im_save = Gtk.Image()# Создание иконок из стока для кнопки
        self.im_save.set_from_stock(Gtk.STOCK_OK, 4)
        self.button_save = Gtk.Button()
        self.button_save.set_image(self.im_save)
        self.button_save.set_relief(Gtk.ReliefStyle.HALF)
        self.button_save.set_resize_mode(Gtk.ResizeMode.PARENT)
        self.button_save.set_alignment(0.5, 0.5)
        self.button_save.connect("clicked", self.ret_md)
        self.name_entry = Gtk.Entry()
        self.grid.attach(self.save_preset_eq, 0, 1, 5, 1)
        self.grid.attach(self.name_entry, 5, 1, 9, 1)
        self.grid.attach(self.button_save, 14, 1, 3, 1)
        self.sc_l = [Gtk.Scale.new_with_range(Gtk.Orientation.VERTICAL, 0, 36, 0.1) for x in range(18)]
        self.label_l = [Gtk.Label.new() for x in range(18)]
        c = 0
        for x in self.sc_l:
            self.label_l[c].set_width_chars(2)
            x.set_draw_value(False)
            x.set_value_pos(Gtk.PositionType.TOP)
            x.set_has_origin(True)
            x.connect("change-value", self.v)
            self.grid.attach(self.label_l[c], c, 2, 1, 1)
            self.grid.attach(x, c, 3, 1, 10)
            for k, v in self.scale_n.items():
                if str(self.mdict[c]) == v:
                    print('True ==> ', self.mdict[c], k, v)
                    self.label_l[c].set_label(v)
                    x.set_value(k)
            c += 1
        #self.grid.attach(self.button, 7, 13, 4, 1)
        self.grid.set_row_homogeneous(False)
        self.grid.set_column_homogeneous(False)
        self.grid.set_row_spacing(20)
        self.grid.set_column_spacing(30)
        self.show_all()
    def ret_md(self, *args):
        print(self.mdict)
        self.write_cfg_prs()
        return self.mdict
    def write_cfg_prs(self):
        if os.path.isfile(os.path.dirname(os.path.realpath(__file__))+'/set-eq.ini'):
            config = configparser.ConfigParser()
            config['EQ-Settings'] = {'LastEQ': self.mdict}
            with open('set-eq.ini', 'w') as configfile:
                config.write(configfile)
    def v(self, *value):
        for x in range(0, 18):
            if round(self.sc_l[x].get_value()) == round(value[2]):
                self.label_l[x].set_label(self.scale_n.get(round(value[2])))
                self.mdict[x] = int(self.scale_n.get(round(value[2])))
EQWindow()
Gtk.main()
А именно:
for k, v in self.scale_n.items():
                if str(self.mdict[c]) == v:
                    print('True ==> ', self.mdict[c], k, v)
                    self.label_l[c].set_label(v)
                    x.set_value(k)
py.user.next
Такой вставь временно.
        for x in self.sc_l:
            self.label_l[c].set_width_chars(2)
            x.set_draw_value(False)
            x.set_value_pos(Gtk.PositionType.TOP)
            x.set_has_origin(True)
            x.connect("change-value", self.v)
            self.grid.attach(self.label_l[c], c, 2, 1, 1)
            self.grid.attach(x, c, 3, 1, 10)
            print('See 1')
            for k, v in self.scale_n.items():
                print('See 2')
                if str(self.mdict[c]) == v:
                    print('See 3')
                    print('True ==> ', self.mdict[c], k, v)
                    self.label_l[c].set_label(v)
                    x.set_value(k)
            c += 1
ivsatel
py.user.next

Приведя к int() сравнение отрабатывает, а в строковом представлении нет…

if int(self.mdict[c]) == int(v)
py.user.next
Посмотри типы.
        for x in self.sc_l:
            self.label_l[c].set_width_chars(2)
            x.set_draw_value(False)
            x.set_value_pos(Gtk.PositionType.TOP)
            x.set_has_origin(True)
            x.connect("change-value", self.v)
            self.grid.attach(self.label_l[c], c, 2, 1, 1)
            self.grid.attach(x, c, 3, 1, 10)
            print('See 1')
            for k, v in self.scale_n.items():
                print('See 2')
                print('Type 1', type(self.mdict[c]), type(v))
                if str(self.mdict[c]) == v:
                    print('See 3')
                    print('True ==> ', self.mdict[c], k, v)
                    self.label_l[c].set_label(v)
                    x.set_value(k)
            c += 1
ivsatel
py.user.next
Посмотри типы.
Типы приходят строковые. Тут скорее всего моя криворукость при обработке данных ConfigParser(). В общем есть над чем поработать. Спасибо за помощь!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB