python error - TypeError: строковые индексы должны быть целыми числами - PullRequest
0 голосов
/ 08 мая 2020

Я создавал приложение для карточек и наткнулся на препятствие при попытке реализовать радиокнопку. Проблема в том, что при запуске отображается меню и вы можете получить доступ к уроку, но переключатели не отображаются. Всякий раз, когда запускается код, эта ошибка появляется TypeError: строковые индексы должны быть целыми числами , прикрепленными к функции Radiobutton balancing_radio_butto1 = Radiobutton(balancing_frame, text = balancing[answer_list[0]], variable=balancing_radio, value = 1), если кто-то может объяснить, почему появляется эта ошибка, а также как ее исправить, это будет очень признателен. Ниже приведен мой код, который у меня есть.

from tkinter import *
from PIL import ImageTk, Image
from random import branding
import random

root = Tk()
root.title('Chemistry Flashcards')
root.geometry("500x500")


def balancing():
balancing_frame.pack(fill="both", expand=1)



global show_balancing
show_balancing = Label(balancing_frame)
show_balancing.pack(pady=15)

global balancing
balancing = ['balanced1', 'balanced2', 'balanced3', 'balanced4', 'balanced5', 'unbalanced1', 'unbalanced2', 'unbalanced3', 'unbalanced4', 'unbalanced5']

global balancing_state
balancing_state = {
'balanced1':'balanced',
'balanced2':'balanced',
'balanced3':'balanced',
'balanced4':'balanced',
'balanced5':'balanced',
'unbalanced1':'unbalanced',
'unbalanced2':'unbalanced',
'unbalanced3':'unbalanced',
'unbalanced4':'unbalanced',
'unbalanced5':'unbalanced',

}

answer_list = []
count = 1


while count < 3:
    rando = randint(0, len(balancing_state)-1)
    if count == 1:
        answer = balancing[rando]

        global balancing_image
        balancing = "C:/Users/Kisitu/Desktop/project/balancing/" + balancing[rando] + ".png"
        balancing_image = ImageTk.PhotoImage(Image.open(balancing))
        show_balancing.config(image=balancing_image)

    answer_list.append(balancing[rando])

    '''random.shuffle(balancing)'''
    count += 1

    random.shuffle(answer_list)

global balancing_radio
balancing_radio = IntVar()

balancing_radio_butto1 = Radiobutton(balancing_frame, text = balancing[answer_list[0]], variable=balancing_radio, value = 1)
balancing_radio_butto1.pack(pady=10)
balancing_radio_butto2 =  Radiobutton(balancing_frame, text = balancing[answer_list[1]], variable=balancing_radio, value = 2).pack()




my_menu = Menu(root)
root.config(menu=my_menu, bg='#B7F7BB')

lesson_menu = Menu(my_menu)
my_menu.add_cascade(label="Lesson", menu=lesson_menu)
lesson_menu.add_command(label="balancing", command=balancing)
lesson_menu.add_separator()
lesson_menu.add_command(label="Exit", command=root.quit)


balancing_frame = Frame(root, width=500, height=500, )



root.mainloop()

1 Ответ

1 голос
/ 08 мая 2020

... text = balancing[answer_list[0]] ...

балансировка - это список, вы пытаетесь проиндексировать значение из списка. вы передаете answer_list [0] в качестве индекса. answer_list содержит случайные строки из балансировки. вы пытаетесь проиндексировать список строкой, например

balancing["balanced2"]

, может, вы могли бы использовать словарь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...