为什么我的代码无法翻到第二页?

问题描述 投票:0回答:1

首先,我尝试使用一个生成随机口袋妖怪的程序,这样我们就可以创建团队来进行对决。看起来像这样

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() 中,我尝试在应该生成的列表后打印列表,结果显示为空白

对语法表示歉意,英语不是我的母语

python function tkinter
1个回答
0
投票

请注意,

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
    ...

...
© www.soinside.com 2019 - 2024. All rights reserved.