Преобразование WxPython в числовое значение TypeError

62
7

Поэтому я предполагаю, что это довольно простой вопрос, когда я просто не понимаю ошибки. Это мой текущий код:

        # SINGLE CHOICE INPUT
choices = ["Auto", "Manual", "Manual (code only)"]
chooseOneBox = wx.SingleChoiceDialog(None, "Setup / Opsætning", "Setup / Opsætning", choices)

if chooseOneBox.ShowModal() == wx.ID_OK:
setupChoice = choices.index[chooseOneBox.GetStringSelection()] + 1
if setupChoice == 1:
print(choices[setupChoice]-1)
elif setupChoice == 2:
print(choices[setupChoice]-1)
print(choices[setupChoice])

Поэтому у меня есть список choices который содержит кучу опций, которые правильно отображаются в chooseOneBox. При попытке сделать:
setupChoice = choices.index[chooseOneBox.GetStringSelection()] + 1 Я получаю следующую ошибку: 'builtin_function_or_method' object is not subscriptable setupChoice = choices.index[chooseOneBox.GetStringSelection()] + 1.

Я хочу преобразовать строку из chooseOneBox в целое число по упрощенным причинам. Как избежать этой ошибки?

спросил(а) 2021-01-19T19:49:20+03:00 2 месяца, 3 недели назад
1
Решение
62

Я не вижу никакого преимущества в том, как вы выполняете этот код.
Почему бы не вместо этого:

choices = ["Auto", "Manual", "Manual (code only)"]
chooseOneBox = wx.SingleChoiceDialog(None, "Setup / Opsætning", "Setup / Opsætning", choices)

if chooseOneBox.ShowModal() == wx.ID_OK:
setupChoice = choices.index(chooseOneBox.GetStringSelection())
print(choices[setupChoice])


Или даже более просто, используя GetSelection() который возвращает индекс выбранного элемента:

choices = ["Auto", "Manual", "Manual (code only)"]
chooseOneBox = wx.SingleChoiceDialog(None, "Setup / Opsætning", "Setup / Opsætning", choices)

if chooseOneBox.ShowModal() == wx.ID_OK:
print(choices[chooseOneBox.GetSelection()])

ответил(а) 2021-01-19T19:49:20+03:00 2 месяца, 3 недели назад
61

index - это функция list которая возвращает первый индекс вхождения элемента.

замещать

choices.index[chooseOneBox.GetStringSelection()] + 1

С этим

choices.index(chooseOneBox.GetStringSelection()) + 1

ответил(а) 2021-01-19T19:49:20+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема