Kivy选择.pyfile中的屏幕并在.kvfi中使用

2024-09-28 22:00:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图列出一个屏幕列表,并在这个python文件中随机选择一个屏幕(这里不包括其他代码,如builder等):

class selectionScreen
    testScreen = StringProperty('Screen1')

    def screenSelector(self)
        screenList = ['Screen1', 'Screen2']
        testNumber = random.randint(0, 1)
        testScreen = screenList[testNumber]
        return testscreen

然后我想在我的.kv文件中选择这个屏幕,它看起来有点像这样,但也包括屏幕1和2

ScreenManager:
    SelectionScreen:
        name: 'SelectionScreen'
    Screen0:
        name: 'Screen0'
    Screen1:
        name: 'Screen1'

<SelectionScreen>:
     BoxLayout:
        Button:
            text: "Click when ready"
            size_hint: .6, .5
            font_size: 10
            on_press: root.screenSelector()
            on_release: root.manager.current = 'Screen0'
<Screen0>:
    BoxLayout:
        orientation: 'vertical'
        Button:
            text: "Next"
            on_release: root.manager.current = str(root.testScreen)

SelectionScreen工作正常,但现在无法访问screen0。拆卸管路时

on_press: root.screenSelector()

不过,我可以这样做。你知道吗

提前感谢您的帮助!你知道吗


Tags: 文件textname屏幕onbuttonrootboxlayout
1条回答
网友
1楼 · 发布于 2024-09-28 22:00:51

问题

  1. 您无法访问屏幕0,因为它不在您的屏幕列表中。你知道吗
  2. 方法screenSelector中定义的变量testScreen是一个局部变量,与classselectionScreen中定义的类变量testScreen不同。你知道吗
  3. 未定义变量,由于输入错误返回testscreen。你知道吗
  4. 屏幕0上,代码on\u release:根.manager.current=结构(根.testScreen)将导致属性错误:“Screen0”对象没有属性“testScreen”

解决方案

为了进入Screen0,您必须执行以下操作:

Python脚本

  1. 屏幕0添加到变量屏幕列表
  2. 替换随机.randint(0,1)随机.randint(0,2)
  3. 测试屏幕替换为自检屏幕方法屏幕选择器

kv文件

  1. 定义一个id,例如id:选择屏幕
  2. 引用它,例如根.manager.ids.选择_screen.testScreen测试屏幕
  3. 在其他屏幕中,添加对屏幕选择器的按键调用,例如在按键:根.manager.ids.选择_screen.screen选择器()

示例

你知道吗主.py你知道吗

from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.properties import StringProperty
import random


class ScreenManager(ScreenManager):
    pass


class SelectionScreen(Screen):
    testScreen = StringProperty('Screen1')

    def screenSelector(self):
        screenList = ['Screen0', 'Screen1', 'Screen2']
        testNumber = random.randint(0, 2)
        self.testScreen = screenList[testNumber]
        return self.testScreen


class Screen0(Screen):
    pass


class Screen1(Screen):
    pass


class Screen2(Screen):
    pass


class Test(App):

    def build(self):
        return ScreenManager()


if __name__ == "__main__":
    Test().run()

你知道吗试验电压(kv)你知道吗

#:kivy 1.10.0

<ScreenManager>:
    SelectionScreen:
        id: selection_screen
        name: 'SelectionScreen'
    Screen0:
        name: 'Screen0'
    Screen1:
        name: 'Screen1'
    Screen2:
        name: 'Screen2'

<SelectionScreen>:
    BoxLayout:
        Button:
            text: "Click when ready"
            size_hint: .6, .5
            font_size: 10
            on_press: root.screenSelector()
            on_release:
                root.manager.current = str(root.manager.ids.selection_screen.testScreen)

<Screen0>:
    BoxLayout:
        orientation: 'vertical'
        Button:
            text: "Screen 0"
            on_press: root.manager.ids.selection_screen.screenSelector()
            on_release:
                root.manager.current = str(root.manager.ids.selection_screen.testScreen)

<Screen1>:
    BoxLayout:
        orientation: 'vertical'
        Button:
            text: "Screen 1"
            on_press: root.manager.ids.selection_screen.screenSelector()
            on_release:
                root.manager.current = str(root.manager.ids.selection_screen.testScreen)

<Screen2>:
    BoxLayout:
        orientation: 'vertical'
        Button:
            text: "Screen 2"
            on_press: root.manager.ids.selection_screen.screenSelector()
            on_release:
                root.manager.current = str(root.manager.ids.selection_screen.testScreen)

输出

Img01 - App StartupImg02 - Screen2 DisplayedImg03 - Screen0 DisplayedImg04 - Screen1 DisplayedImg05 - Screen2 DisplayedImg06 - Screen0 Displayed

相关问题 更多 >