Python Tkinter问题与if块中的标签
我对tkinter中if语句中的标签有问题,与try/except块类似 我正在尝试创建一个基于csv数据的口袋妖怪战斗模拟器 这是从csv中提取数据,但当有人输入一个不在base中的名称时,豁免机制不起作用Python Tkinter问题与if块中的标签,python,if-statement,tkinter,label,Python,If Statement,Tkinter,Label,我对tkinter中if语句中的标签有问题,与try/except块类似 我正在尝试创建一个基于csv数据的口袋妖怪战斗模拟器 这是从csv中提取数据,但当有人输入一个不在base中的名称时,豁免机制不起作用 else: my_label = Label(root, text="Oops! I don't think we got such Pokemon archive.", font=("Comic Sans", 20)) my_la
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()
迈克-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)
这里有很多代码,您的问题不够具体。你犯了什么错误?什么线路导致了问题?请阅读和。感谢您的评论,我已对我的问题进行了更具体的编辑,以便更好地理解我的问题。我可以告诉您
,而True
语句可能是导致代码冻结的原因。不要在tkinter的同一线程中使用while
语句或sleep()
,因为它们会阻塞主循环并冻结程序。也就是说,将所有导入都移动到代码的顶部。不要将导入放在函数中。每次有人按下按钮,你就会无缘无故地一次又一次地导入。它只需要在代码开始时发生一次。同时将您的global
放在函数的开头。“它只是更容易阅读和处理。我同意每件事,”迈克说。此外,在这种情况下,您的while True:
似乎是一个无限循环(即使发生ValueError
),这在非tkinter应用程序中也是错误的。