首先,我尝试使用一个生成随机口袋妖怪的程序,这样我们就可以创建团队来进行对决。看起来像这样
import tkinter as tk
from tkinter import *
import random
import pypokedex
root = tk.Tk() #main
#1ra página
inicio = Frame(root)
inicio.grid(row=0, column=0)
ttl = Label(inicio, text="¿Quienes juegan?")
quienes_juegan = StringVar()
txt1 = Entry(inicio, textvariable = quienes_juegan, width=50) #quienes juegan
btn1 = Button(inicio, text="Confirmar", command= lambda: accion()) #avanza y tira los pokes
#colocando los botones
ttl.grid(padx=650)
txt1.grid(pady=20)
btn1.grid()
elecciones = Frame(root)
elecciones.grid(row=0, column=0)
jugadores = []
def accion(): #pa avanzar de pagina
quienes_juegan_geteado = quienes_juegan.get()
variablesss = quienes_juegan_geteado.split()
jugadores.extend(variablesss)
print(jugadores)
elecciones.tkraise()
botoncitos(elecciones,pokimones)
#Numero de pokimons
numero_pokimons = 30
#Quieres legendarios? si = Tru ; no = False
legendarios = False
#Magia
legendary_list = [144,145,146,150,151,243,244,245,249,250,251,377,378,379,380,381,382,383,384,385,386,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,638,639,640,641,642,643,644,645,646,647,648,649,716,717,718,719,720,721,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809]
pokimones = []
while numero_pokimons != 0:
poke = random.randint(1,809)
if poke in pokimones:
continue
#iteracion para legendarios
if legendarios == True:
if poke in legendary_list :
pokimones.append(poke)
numero_pokimons = numero_pokimons-1
else:
continue
#iteracion para no legendarios
elif legendarios == False:
if poke in legendary_list:
continue
else:
pokimones.append(poke)
numero_pokimons = numero_pokimons-1
#ordenamos de mayor a menor los pokimons para que se vea mas bonito
pokimones = sorted(pokimones)
#Imprime los pokimons con su nombre
#'interfaz'
if legendarios == True:
conf_lege = 'SI'
else:
conf_lege = 'NO'
elegibles = [pypokedex.get(dex=dex_number) for dex_number in pokimones]
def botoncitos(elecciones, pokimones):
def crear_boton(index):
def seleccionar_pokemon():
button.config(state=DISABLED)
button = Button(elecciones, text=item, command=seleccionar_pokemon)
button.grid(sticky="nsew", row = index // 6, column = index % 6 )
for index, item in enumerate(elegibles):
crear_boton(index)
inicio.tkraise()
root.geometry("1400x250")
root.mainloop()
这个很有效,它生成了 30 个按钮,每行 6 个,每个 Pokemon 都生成了
我尝试对函数中的所有内容进行排序,以便当我必须修改某些变量时代码可以工作,例如它不是只创建 30 个神奇宝贝编号,而是为每个用户创建 6 个神奇宝贝编号
import tkinter as tk
from tkinter import *
import random
import pypokedex
root = tk.Tk() #main
jugadores = [] #players
cantidad_jugadores = len(jugadores) #number of players
pokimones = [] #list of pokemon numbers generated by generar_pokimons
elegibles = [pypokedex.get(dex=dex_number) for dex_number in pokimones] #transforms the numbers generated into pokemon names
def accion(): #command that turns to elecciones, the second page
quienes_juegan_geteado = quienes_juegan.get() #gets the entry
variablesss = quienes_juegan_geteado.split() #splits the entry
jugadores.extend(variablesss) #extends it to the players list in the global variable
print(jugadores) #just to test if it works
generar_pokimones() #generate the pokemon numbers
botoncitos(elecciones,pokimones)
elecciones.tkraise()
def botoncitos(elecciones, pokimones): #creates 1 button per pokemon generated and places them in a grid of 6
def crear_boton(index):
def seleccionar_pokemon():
button.config(state=DISABLED)
button = Button(elecciones, text=item, command=seleccionar_pokemon)
button.grid(sticky="nsew", row = index // 6, column = index % 6 )
for index, item in enumerate(elegibles):
crear_boton(index)
def generar_pokimones():
pokemones= []
numero_pokimons = cantidad_jugadores * 6 #number of pokemons determined by the number of players
#if you want to play with legendary pokemons
legendarios = False
legendary_list = [144,145,146,150,151,243,244,245,249,250,251,377,378,379,380,381,382,383,384,385,386,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,638,639,640,641,642,643,644,645,646,647,648,649,716,717,718,719,720,721,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809]
#loop
while numero_pokimons != 0:
poke = random.randint(1,809)
if poke in pokemones:
continue
if legendarios == True:
if poke in legendary_list :
pokemones.append(poke)
numero_pokimons = numero_pokimons-1
else:
continue
elif legendarios == False:
if poke in legendary_list:
continue
else:
pokemones.append(poke)
numero_pokimons = numero_pokimons-1
pokemones = sorted(pokemones)#sort
pokimones.extend(pokemones) #adds the list to the global variable pokimones
#1st page
inicio = Frame(root)
inicio.grid(row=0, column=0)
ttl = Label(inicio, text="¿Quienes juegan?")
quienes_juegan = StringVar()
txt1 = Entry(inicio, textvariable = quienes_juegan, width=50) #who plays?
btn1 = Button(inicio, text="Confirmar", command= lambda: accion()) #turns to the 2nd page, elecciones
ttl.grid(padx=650)
txt1.grid(pady=20)
btn1.grid()
elecciones = Frame(root) #the second page, where it displays 6 buttons with pokemon per user
elecciones.grid(row=0, column=0)
inicio.tkraise()
root.geometry("1400x250")
root.mainloop()
但是现在当我运行此代码并单击按钮 1 时,它就停止了,似乎它没有获取数字列表,因此它可以生成按钮。在 accion() 中,我尝试在应该生成的列表后打印列表,结果显示为空白
对语法表示歉意,英语不是我的母语
请注意,
cantidad_jugadores
为零,因为它是由以下行设置的:
cantidad_jugadores = len(jugadores)
当执行上面的代码行时,
jugadores
是一个空列表。
因此
generar_pokkimones()
内的while循环内的代码块将不会被执行,因为numero_pokimons
(被赋予cantidad_jugadores
的值)为零。
您需要获取
jugadores
内 generar_pokimones()
的大小:
...
def generar_pokimones():
pokkemones = []
numero_pokimons = len(jugadores) * 6 # get the size of jugadores here
...
...