2013-04-25 3 views
1

Я создаю новое приложение для своего текущего проекта с использованием Python. Это первый раз, когда я использую его, и это был опыт обучения ...Python - Tkinter - GUI

У меня есть кнопка в приложении, которая вызывает функцию askcolor() из Python. Все работает отлично в первый раз, но после этого оно дает мне следующую ошибку.

AttributeError: 'str' object has no attribute 'set' 

Это последовательность, что я работаю в моем приложении:

  1. Пользователь нажмите на Select Color кнопку:

    self.bc_bttn=Button(self, text='Select Color', command=lambda: self.callback()) 
    
  2. Функция вызывает функцию callback и I выберите нужный цвет

    def callback(self): 
        (triple, hexstr) = askcolor() 
        if triple: 
         triple_string = str(triple) 
         triple_string2 = re.findall('[0-9, ]',triple_string); 
         triple_bkgColor = ''.join(triple_string2) 
         print triple_bkgColor 
         self.overlayColorValue.set(triple_bkgColor) 
    
  3. self.overlayColorValue.set(triple_bkgColor) изменяет значение параметра текстового поля, так что пользователь будет видеть правильное значение по применению

  4. жму кнопку Save

    self.overlayColorValue = self.bc_ent.get() 
    body.set('overlay-color', self.overlayColorValue) 
    
  5. Мои изменения записываются в файл XML

    tree.write(CONFIG_XML) 
    
  6. На этот раз все работает нормально, но если я хочу снова сделать то же самое для изменения цвета. то у меня есть следующее сообщение об ошибке, когда я нажимаю на кнопку Select Color

    AttributeError: 'str' object has no attribute 'set' 
    
+1

Я попытался исправить форматирование. Вы должны проверить отступ в коде и исправить его, если это необходимо. Кроме того, попробуйте придумать более описательный заголовок. Текущая версия больше похожа на список тегов, я добавил теги. Нажмите [edit], чтобы улучшить свой вопрос. –

ответ

1

Вы заменили свой атрибут self.overlayColorValue с возвращаемым значением self.bc_ent.get(), который является str.

Предположительно, до этого времени, это был ярлык, и вы хотели назвать .set() на нем вместо:

self.overlayColorValue.set(self.bc_ent.get()) 
body.set('overlay-color', self.overlayColorValue.get())