2013-04-30 2 views
-1

Я пытаюсь внедрить примитивный словарь, чтобы найти аббревиатуры, которые мы используем в лаборатории. Словарь в формате:Python словарь добавлять/удалять элементы в tkinter против non-GUI

{'REN': 'plasma renin', 'PROP': 'procollagen III', 'IMETAB': 'intermediary metabolites, pyruvate, lactate, beta-OH-butyrate'...} 

я могу сделать поиск предметов по словарю как в GUI и другой формат, но получаю сообщение об ошибке при попытке добавить/удалить элементы, но только с форматом графического интерфейса пользователя. Вот два обрывки нарушившей кода:

Этот код работает

elif inp == 'add': 
     abbr_in = input('acronym: ') 
     text_in = input('expanded text: ') 
     acronyms[abbr_in] = text_in 
     with open('acronym_dict.py','w')as outfile: 
      outfile.write(str(acronyms)) 
      outfile.close() 

elif inp == 'delete': 
     name = input("Enter acronym to delete: ").upper() 
     r =dict(acronyms) 

      del r[name]     

      with open('acronym_dict.py','w')as outfile: 
       outfile.write(str(r)) 
       outfile.close() 

и код GUI, который не работает:

def add_acronym(): 
add_del_acronym.get() 
add_del_acronym.upper() 
abbr_in = addordel_acronym 
add_expansion.get() 
text_in = add_expansion 
acronyms[abbr_in] = text_in 
# write amended dictionary 
with open('acronym_dict.py','w')as outfile: 
    outfile.write(str(acronyms)) 
    outfile.close() 
def remove_acronym(): 
    name = addordel_acronym.get().upper() 
    name.upper() 
    r =dict(acronyms) 
    del r[name] 
    # write amended dictionary 
    with open('acronym_dict.py','w')as outfile: 
     outfile.write(str(r)) 
     outfile.close() 

ошибка, что я получаю:

TypeError: get() missing 1 required positional argument: 'self' 

Пожалуйста, кто-нибудь может прийти на помощь. Не понимаю, что делать. Thanks

+0

ваших отступы перепутались в вашем примере, что делает его невозможным, чтобы знать истинную природу вашего кода. –

ответ

0

Сообщение об ошибке, которое вы даете, не имеет отношения к tkinter. Когда вы получите сообщение об ошибке, говорящее:

TypeError: get() missing 1 required positional argument: 'self' 

... то это означает, что вы вызываете функцию как something.get() но вы определили что-то, как def something(self). Итак, отследите, какой вызов функции бросает эту ошибку, чтобы найти вашу проблему. Я предполагаю, что у вас есть переменная, которую вы думаете, что - это словарь, но на самом деле является экземпляром класса.

На основании комментариев к исходной версии этого вопроса представляется неправильным использование класса tkinter StringVar. Вы, видимо, делают это:

variable = tkinter.StringVar 

Это приводит к тому, чтобы вы присваиваете класс к variable, а не например класса к variable. Класс определяет метод с именем get, который вы вызываете, но для этого требуется параметр self, который сообщает классу, к какому экземпляру вы обращаетесь. Поскольку вы не ссылаетесь на экземпляр, self не определен, и вы получаете сообщение об ошибке.

Чтобы устранить проблему необходимо создать экземпляр StringVar, например, так:

variable = tkinter.StringVar() 
+0

Спасибо. Будет охотиться. – user1478335

+0

Я не вижу этого. Есть ли «быстрый» способ найти такую ​​ошибку. Не могу придумать уступку или доктрину. Какие-либо предложения? Должен ли я опубликовать весь код? – user1478335

+0

@ user1478335: «Быстрый» способ - просмотреть полный текст ошибки, он должен указать номер строки, вызывающий проблему. –

Смежные вопросы