首页 > 解决方案 > 每次按下按钮时,如何从列表中随机生成一个新项目?

问题描述

我正在学习如何使用 kivy,并且我制作了一个示例代码,旨在每次按下按钮时从列表中选择一个新的随机项目。当我运行此代码时,我收到错误消息:'第 19 行,在 NewChoice 编号 += 1 UnboundLocalError:分配之前引用的局部变量'编号'。如何在 NewChoice 函数中引用编号?

代码:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.label import Label
from kivy.uix.screenmanager import Screen
import random

RandomList = ["First", "Second", "Third", "Fourth", "Fifth"]
number = 0

class GameScreen(Screen):

    def __init__(self, **args):
        Screen.__init__(self, **args)
        self.item = random.sample(RandomList, 5)
        self.label = Label(text=str(self.item[number]), color=(1,0,0,1), font_size=(45),size_hint=(0.2,0.1), pos_hint={"center_x":0.5, "center_y":0.9})
        self.add_widget(self.label)

    def NewChoice(self):
        number += 1
        self.label.text = str(self.item[number])

Builder.load_string('''
<GameScreen>:
    name: "GameScreen"
    canvas:
        Color:
            rgb: 1, 1, 1
        Rectangle:
            pos: self.pos
            size: self.size

    Button:
        size: self.texture_size
        on_release: root.NewChoice()
        text: "Press"
        font_size: 50
        color: 1,1,1,1
        background_color: (0,0,0,1)
        background_normal: ""
        background_down: ""
        size_hint: None, None
        pos_hint: {"center_x":0.5, "center_y":0.6}
        width: self.texture_size[0] + dp(10)
        height: self.texture_size[1] + dp(10)
    ''')

class TestApp(App):
    def build(self):
        return GameScreen()

if __name__ == '__main__':
    TestApp().run()

标签: pythonrandomkivy

解决方案


您需要在类中初始化数字,而不是在文件外部,即 init add

self.number = 0

那应该工作


推荐阅读