Tkinter проблема с меткой в ​​блоке if - PullRequest
0 голосов
/ 25 января 2020

У меня есть проблема с меткой в ​​операторе if в tkinter, также похожая на блок try / исключением.

Я пытаюсь создать симулятор боя покемонов на основе данных из CSV.

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

     else:
            my_label = Label(root, text="Oops! I don't think we got such Pokemon archive.", font=("Comic Sans", 20))
            my_label.grid(row=1, column=1)

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

   from tkinter import *


def create_pokemon_b():
    import pandas as pd
    df_pokemons = pd.read_csv('/home/js/PycharmProjects/untitled/main_Pokemon.csv')
    while True:
        name = str(entry_pokename_b.get()).capitalize()
        if name in list(df_pokemons['pokename']):
            while True:
                level = entry_pokelevel_b.get()
                try:
                    level = int(level)
                    speed = int(df_pokemons[(df_pokemons['pokename'] == name) & (df_pokemons['pokelevel'] == level)][
                                    'speed'].mean())
                    hp = int(df_pokemons[(df_pokemons['pokename'] == name) & (df_pokemons['pokelevel'] == level)][
                                 'hp'].mean())
                    att = int(df_pokemons[(df_pokemons['pokename'] == name) & (df_pokemons['pokelevel'] == level)][
                                  'attack'].mean())
                    defense = int(df_pokemons[(df_pokemons['pokename'] == name) & (df_pokemons['pokelevel'] == level)][
                                      'defense'].mean())
                    type1 = str(df_pokemons[(df_pokemons['pokename'] == name) & (df_pokemons['pokelevel'] == level)][
                                    'type1'].unique()[0])
                    stats = Label(root,
                                  text='{} on level {}: \nType = {} \nHP = {} \nDefense = {} \nSpeed = {}\nAttack = {}\n'.format(
                                      name, level, type1, hp, defense, speed, att), font=("Comic Sans", 15))
                    stats.grid(row=7, column=1, columnspan=6, rowspan=6)
                    global poke_b
                    poke_b = tuple(type1, name, level, speed, hp, defense, att)

                except ValueError:
                    error = Label(root, text="Oops! I don't think we got such Pokemon archive.",
                                  font=("Comic Sans", 20))
                    error.grid(row=7, column=1)
        else:
            my_label = Label(root, text="Oops! I don't think we got such Pokemon archive.", font=("Comic Sans", 20))
            my_label.grid(row=1, column=1)


root = Tk()

my_label = Label(root)
my_label.grid(row=1, column=1)
#entry fields where name and level of pokemon B are entered

label_pokename = Label(root, text='Enter name of Pokemon A.',font=("Comic Sans", 15))
label_pokelevel = Label(root, text='What is it\'s level?',font=("Comic Sans", 15))

entry_pokename = Entry(root, width=40, font=("Comic Sans", 15))
entry_pokelevel = Entry(root, width=40, font=("Comic Sans", 15))

label_pokename.grid(row=0)
entry_pokename.grid(row=1)
label_pokelevel.grid(row=2)
entry_pokelevel.grid(row=3)

#statistics field

stats = Label(root)
stats.grid(row=1,column=1, columnspan=6, rowspan=6)

#button starting function used to pull pokemon data from the csv

button_a = Button(root, text='Search',font=("Comic Sans", 15),command=create_pokemon_a)
button_a.grid(row=4)

root.mainloop()

1 Ответ

0 голосов
/ 25 января 2020

Майк - SMT, спасибо за ответ. Действительно, когда я убрал оператор while, код начал работать.

def create_pokemon_b():
    import pandas as pd
    df_pokemons = pd.read_csv('/home/js/PycharmProjects/untitled/main_Pokemon.csv')
        name = str(entry_pokename_b.get()).capitalize()
        if name in list(df_pokemons['pokename']):
                level = entry_pokelevel_b.get()
                try:
                    level = int(level)
                    speed = int(df_pokemons[(df_pokemons['pokename'] == name) & (df_pokemons['pokelevel'] == level)][
                                    'speed'].mean())
                    hp = int(df_pokemons[(df_pokemons['pokename'] == name) & (df_pokemons['pokelevel'] == level)][
                                 'hp'].mean())
                    att = int(df_pokemons[(df_pokemons['pokename'] == name) & (df_pokemons['pokelevel'] == level)][
                                  'attack'].mean())
                    defense = int(df_pokemons[(df_pokemons['pokename'] == name) & (df_pokemons['pokelevel'] == level)][
                                      'defense'].mean())
                    type1 = str(df_pokemons[(df_pokemons['pokename'] == name) & (df_pokemons['pokelevel'] == level)][
                                    'type1'].unique()[0])
                    stats = Label(root,
                                  text='{} on level {}: \nType = {} \nHP = {} \nDefense = {} \nSpeed = {}\nAttack = {}\n'.format(
                                      name, level, type1, hp, defense, speed, att), font=("Comic Sans", 15))
                    stats.grid(row=7, column=1, columnspan=6, rowspan=6)
                    global poke_b
                    poke_b = tuple(type1, name, level, speed, hp, defense, att)

                except ValueError:
                    error = Label(root, text="Oops! I don't think we got such Pokemon archive.",
                                  font=("Comic Sans", 20))
                    error.grid(row=7, column=1)
        else:
            my_label = Label(root, text="Oops! I don't think we got such Pokemon archive.", font=("Comic Sans", 20))
            my_label.grid(row=1, column=1)
...