python - 每次按下按钮时,如何从列表中随机生成一个新项目?
问题描述
我正在学习如何使用 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()
解决方案
您需要在类中初始化数字,而不是在文件外部,即 init add
self.number = 0
那应该工作
推荐阅读
- java - 获取从 Thymeleaf 到控制器的文件路径
- javascript - 用链接围绕 wordpress 帖子中的每个单词
- php - 向 mysql 查询添加短暂睡眠以调试缓存
- mysql - 用 MySQL 续集抛出 AssertionErrors
- angular - 当 ng build -prod 部署在网络服务器的子文件夹中时,图像路径不正确
- asp.net-core - Automapper - POST / PUT 实体嵌套层次结构
- json - 反序列化嵌套的 JSON 和 VB.Net
- python - 在循环 seaborn 图中共享次 y 轴
- oracle - Oracle sql 中 LIKE 的空参数应为 false
- c - 编译时断言以确定指针是否为数组