Как читать Nonetypes при сравнении PySimpleGUI и openPyxl

Я назначаю переменную GUI ячейке листа excel. Я использую PySimplegui, затем читаю значения этого графического интерфейса и openpyxl для записи в свой лист Excel. Это всегда говорит мне

TypeError: 'NoneType' object is not subscriptable

не важно что.

import PySimpleGUI as sg
import openpyxl

wb = load_workbook(filename=template_sheet)
excel_sheet = wb['Sheet 1']

layout = [
sg.Input('Input Address here', key='_address_')
]
window = sg.window(layout)

excel_sheet['F9'] = values['_address_'] # THIS IS THE PROBLEM CHILD

Я ожидаю, что values['_address_] будет помещено в ячейку F9 листа Excel. Вместо этого он просто говорит мне, что поскольку values['_address_'] является Nonetype (независимо от того, заполнено оно или нет), он даже не пытается


person Kirby Forsberg    schedule 30.07.2019    source источник
comment
Это говорит о том, что values - это NoneType и что вы не можете подписать его, используя __address__   -  person LazyCoder    schedule 31.07.2019
comment
где вы определяете values ? Возможно, у вас есть values = None, а теперь values['_address_] означает None['_address_], что дает ошибку 'NoneType' object is not subscriptable   -  person furas    schedule 31.07.2019


Ответы (1)


У вас есть 5 проблем. Вы смотрите на ошибки и используете пример кода?

Во-первых, это синтаксис по существу, так как нет sg.window. Это должно быть sg.Window. Вы должны были получить ошибку для этого.

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

В-третьих, вам нужно вызвать window.Read(). Здесь вы получаете переменную values.

В-четвертых, вам не хватает пары [] вокруг элемента sg.Input.

В-пятых, у вас нет кнопки для запуска события. Единственное, что вы можете сделать, это закрыть окно, которое вернет None для значения вашего элемента ввода.

Основные шаблоны проектирования, которые вы можете скопировать, находятся в файле readme.

import PySimpleGUI as sg
import openpyxl

wb = load_workbook(filename=template_sheet)
excel_sheet = wb['Sheet 1']

layout = [
           [sg.Input('Input Address here', key='_address_')],
           [sg.Button('Go')]
         ]

window = sg.Window('Window title', layout)

event, values = window.Read()

excel_sheet['F9'] = values['_address_'] # THIS IS THE PROBLEM CHILD
person Mike from PSG    schedule 31.07.2019
comment
У меня все это было. Я скопировал смутное воссоздание того, что было в коде. У меня есть заголовок, просто я не включил его, скобки были правильными, окно было правильным, и я прочитал значения, иначе я бы не получил TypeError. Это был бы AttributeError или что-то еще. Это моя вина. Я плохо скопировал код. Но проблема заключается в том, что строка, в которой устанавливается «значение [адрес]» для ячейки F9, по-прежнему не работает. - person Kirby Forsberg; 01.08.2019
comment
Я не понимаю, почему вы публикуете код с ПЯТЬЮ ошибками, который совершенно не работает. Особенно, когда вы полностью пропустили добавление некоторых строк кода. Или я думаю, что вы сделали. Вы запускали версию, на восстановление которой я потратил время? - person Mike from PSG; 02.08.2019
comment
Я все еще был новичком в PySimpleGUI. С тех пор я исправил всю эту проблему, просто прочитав документацию и поэкспериментировав с разными методами. Оглядываясь назад на вопрос и предоставленный код, я на 100% вижу проблему. Но в тот момент меня просто познакомили со многими новыми вещами одновременно. Спасибо за помощь. - person Kirby Forsberg; 10.03.2020
comment
Эй, это здорово слышать! Рад, что вы добились прогресса, и здорово, что документация помогла. Это было довольно много месяцев, вы застряли с ним. Хороший. - person Mike from PSG; 11.03.2020