首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在kivy中未切换屏幕

在kivy中未切换屏幕
EN

Stack Overflow用户
提问于 2018-02-23 07:14:33
回答 1查看 55关注 0票数 0

我正在尝试将屏幕从recycleview切换到一个简单的标签。我已经为此添加了一个ScreenManager。当我在recycleview中检测到任何视图上的触摸时,我正在尝试添加屏幕并切换到它。我打算显示检测到触摸的视图内容。但屏幕并没有切换。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.recycleview import RecycleView
from kivy.uix.recycleview.views import RecycleDataViewBehavior
from kivy.uix.label import Label
from kivy.properties import BooleanProperty
from kivy.uix.recycleboxlayout import RecycleBoxLayout
from kivy.uix.behaviors import FocusBehavior
from kivy.uix.recycleview.layout import LayoutSelectionBehavior
from kivy.uix.screenmanager import ScreenManager,Screen

Builder.load_string('''
<SelectableLabel>:
    # Draw a background to indicate selection
    canvas.before:
        Color:
            rgba: (.0, 0.9, .1, .3) if self.selected else (0, 0, 0, 1)
        Rectangle:
            pos: self.pos
            size: self.size
    ScreenManager:
        id:sm
<OneLabel>:
    name:'one'
    Label:
        text:'one'
<RV>:
    viewclass: 'SelectableLabel'
    SelectableRecycleBoxLayout:
        default_size: None, dp(56)
        default_size_hint: 1, None
        size_hint_y: None
        height: self.minimum_height
        orientation: 'vertical'
        multiselect: False
        touch_multiselect: False
''')
class OneLabel(Screen):
    pass

class SelectableRecycleBoxLayout(FocusBehavior, LayoutSelectionBehavior,
                                 RecycleBoxLayout):
    ''' Adds selection and focus behaviour to the view. '''


class SelectableLabel(RecycleDataViewBehavior, Label):
    ''' Add selection support to the Label '''
    index = None
    selected = BooleanProperty(False)
    selectable = BooleanProperty(True)

    def refresh_view_attrs(self, rv, index, data):
        ''' Catch and handle the view changes '''
        self.index = index
        return super(SelectableLabel, self).refresh_view_attrs(
            rv, index, data)

    def on_touch_down(self, touch):
        ''' Add selection on touch down '''
        if super(SelectableLabel, self).on_touch_down(touch):
            return True
        if self.collide_point(*touch.pos) and self.selectable:
            return self.parent.select_with_touch(self.index, touch)

    def apply_selection(self, rv, index, is_selected):
        ''' Respond to the selection of items in the view. '''
        self.selected = is_selected
        if is_selected:
            self.ids.sm.switch_to(OneLabel())
            pass


class RV(RecycleView):
    def __init__(self, **kwargs):
        super(RV, self).__init__(**kwargs)
        self.data = [{'text': str(x)} for x in range(100)]


class MakeApp(App):
    def build(self):
        return RV()

if __name__ == '__main__':
    MakeApp().run()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-24 04:51:43

您需要从应用程序的build()方法返回一个ScreenManager,然后您只能切换到扩展Screen的小部件。您的kv语言字符串中不需要ScreenManager。以下是您的代码稍作修改以执行您想要的操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.recycleview import RecycleView
from kivy.uix.recycleview.views import RecycleDataViewBehavior
from kivy.uix.label import Label
from kivy.properties import BooleanProperty
from kivy.uix.recycleboxlayout import RecycleBoxLayout
from kivy.uix.behaviors import FocusBehavior
from kivy.uix.recycleview.layout import LayoutSelectionBehavior
from kivy.uix.screenmanager import ScreenManager,Screen

Builder.load_string('''
<SelectableLabel>:
    # Draw a background to indicate selection
    canvas.before:
        Color:
            rgba: (.0, 0.9, .1, .3) if self.selected else (0, 0, 0, 1)
        Rectangle:
            pos: self.pos
            size: self.size
<OneLabel>:
    name:'one'
    Label:
        text:'one'
<RVScreen>:
    name: 'rv'
    RV:
        viewclass: 'SelectableLabel'
        SelectableRecycleBoxLayout:
            default_size: None, dp(56)
            default_size_hint: 1, None
            size_hint_y: None
            height: self.minimum_height
            orientation: 'vertical'
            multiselect: False
            touch_multiselect: False
''')
class OneLabel(Screen):
    pass

class SelectableRecycleBoxLayout(FocusBehavior, LayoutSelectionBehavior,
                                 RecycleBoxLayout):
    ''' Adds selection and focus behaviour to the view. '''

class RVScreen(Screen):
    pass

class SelectableLabel(RecycleDataViewBehavior, Label):
    ''' Add selection support to the Label '''
    index = None
    selected = BooleanProperty(False)
    selectable = BooleanProperty(True)

    def refresh_view_attrs(self, rv, index, data):
        ''' Catch and handle the view changes '''
        self.index = index
        return super(SelectableLabel, self).refresh_view_attrs(
            rv, index, data)

    def on_touch_down(self, touch):
        ''' Add selection on touch down '''
        if super(SelectableLabel, self).on_touch_down(touch):
            return True
        if self.collide_point(*touch.pos) and self.selectable:
            return self.parent.select_with_touch(self.index, touch)

    def apply_selection(self, rv, index, is_selected):
        ''' Respond to the selection of items in the view. '''
        self.selected = is_selected
        if is_selected:
            sm.current = 'one'


class RV(RecycleView):
    def __init__(self, **kwargs):
        super(RV, self).__init__(**kwargs)
        self.data = [{'text': str(x)} for x in range(100)]

sm = ScreenManager()
class MakeApp(App):
    def build(self):
        sm.add_widget(RVScreen())
        sm.add_widget(OneLabel())
        return sm

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

我最初想让您的RV类既扩展Screen又扩展RecycleView,但无法实现。所以我把你的RV放到了Screen里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48942936

复制
相关文章
Android 屏幕横竖切换详解
我想大部分人应该都知道Android 里面控制Activity的方向,只要在AndroidManifest.xml里面对应的Activity节点加一句
程思扬
2022/01/11
2.4K0
[android] 手机卫士手势滑动切换屏幕
获取手势识别器GestureDetector对象,通过new GestureDetector(context,listener),参数:上下文,监听器
唯一Chat
2019/09/10
1.7K0
git 在切换分支时有未提交的文件,怎么办? git stash
用git checkout切换本地分支从b1到b2时, 如果b1的本地文件有修改, 会发生冲突。 (b1和b2不在一个commit id上)
MickyInvQ
2020/09/27
3K0
故障分析 | 数据库故障 MHA 未切换
这里暂且不说 hang 住的原因,仅分析数据库 hang 住,但是 MHA 未触发切换。
爱可生开源社区
2022/04/06
1.1K0
iOS在程序中控制系统的屏幕亮度
在iOS5.0以下,在程序中是不能直接设置系统屏幕亮度的,到了ios5.0以后将这个api开放给了开发者,这样我们就可以非常方更的更改系统屏幕的亮度, 使用方法也很简单 ,如下: 获取系统屏幕当前的亮度值 float value = [UIScreen mainScreen].brightness; 设置系统屏幕的亮度值 [[UIScreen mainScreen] setBrightness:value];</pre>
用户7705674
2021/10/29
1.3K0
Android获得控件在屏幕中的绝对坐标
计算该视图在全局坐标系中的x,y值,(注意这个值是要从屏幕顶端算起,也就是索包括了通知栏的高度)//获取在当前屏幕内的绝对坐标
他叫自己MR.张
2019/07/01
2.1K0
多版本 Python 在使用中的灵活切换
今天我们来说说在 windows 系统上如果有多版本的 python 并存时,如何优雅的进行灵活切换。
sylan215
2020/03/03
2.4K0
在Ubuntu 系统中怎么切换多个 PHP 版本
有时,最新版本的安装包可能无法按预期工作。你的程序可能与更新的软件包不兼容,并且仅支持特定的旧版软件包。在这种情况下,你可以立即将有问题的软件包降级到其早期的工作版本。请参阅我们的旧指南,在这了解如何降级 Ubuntu 及其衍生版中的软件包以及在这了解如何降级 Arch Linux 及其衍生版中的软件包。但是,你无需降级某些软件包。我们可以同时使用多个版本。例如,假设你在测试部署在 Ubuntu 18.04 LTS 中的LAMP 栈的 PHP 程序。过了一段时间,你发现应用程序在 PHP 5.6 中工作正常,但在 PHP 7.2 中不正常(Ubuntu 18.04 LTS 默认安装 PHP 7.x)。你打算重新安装 PHP 或整个 LAMP 栈吗?但是没有必要。你甚至不必将 PHP 降级到其早期版本。在这个简短的教程中,我将向你展示如何在 Ubuntu 18.04 LTS 中切换多个 PHP 版本。它没你想的那么难。请继续阅读。
会长君
2023/04/25
2.5K0
Kivy关于dll错误问题
from kivy.app import Appfrom kivy.uix.button import Buttonclass TestApp(App):     def build(self):         return Button(text="Hello,kivy") TestApp().run()1234567 输出结果: [INFO   ] [Logger      ] Record log in C:Usersusth1.kivylogskivy_17-06-09_17.txt[INFO  
一朵灼灼华
2022/08/05
8080
Droid@screen:在PC屏幕上显示Android手机屏幕
这里介绍一款工具——Droid@screen,用来获取手机屏幕,显示在PC屏幕上。它集截图、录像等多种功能于一体。
流柯
2018/08/30
2.2K0
华为手机切换屏幕效果_华为p40页面切换效果怎么换
昨天尝试了一下采用style的方式定义Activity之间切换动画,大致步骤如下:
全栈程序员站长
2022/08/04
9650
Kivy 图形界面开发初体验
•跨平台 Kivy 。编写的程序可在 Linux,Windows,OS X,Android,iOS 和 Raspberry Pi 上运行。•商业友好 。Kivy 基于 MIT 许可证进行开源,可以进行免费的商业使用。•GPU 加速 。Kivy 的图像引擎基于 Open ES 2 构建,性能出众。
州的先生
2021/02/03
8.6K0
Kivy 图形界面开发初体验
通过Kivy将Python文件打包成apk
流行的用户界面,比如多点触摸等等。且Kivy 可以运行于 Windows, Linux,
全栈程序员站长
2022/08/31
3.6K0
Python 界面工具--Kivy 初尝试
Kivy是一个开源工具包能够让使用相同源代码创建的程序能跨平台运行。它主要关注创新型用户界面开发,如:多点触摸应用程序。Kivy还提供一个多点触摸鼠标模拟器, Kivy基于Cython(C extensions for Python)构建,所以开发需要懂得Python语言。当前支持的平台包括:Linux、Windows、Mac OS X和Android。这样可以用python开发各种平台的包。
雷子
2021/03/15
1.8K0
Python 界面工具--Kivy 初尝试
Java中的屏幕共享
远程屏幕共享用于各种应用程序和服务,从网络会议到远程访问应用程序。二线工程师可以使用它来协助一线的同事,或者技术支持专家可以使用它来准确了解到客户的故障现象。
闻说社
2022/11/04
1.9K0
转:哈希算法在屏幕监控软件中的性能分析与优化
在屏幕监控软件里,哈希算法经常被用来快速比较和侦测屏幕内容的变化,这样就能立即抓取屏幕截图或者视频帧的变动。就在这种情境下,哈希算法的性能优化变得特别重要,因为它直接影响到监控软件的实时反应和效率。下面分享一些关于如何在屏幕监控软件中对哈希算法进行性能分析和优化的建议:
啵啵鳐
2023/08/09
1210
点击加载更多

相似问题

无法在Kivy中切换屏幕

110

在kivy中面临切换屏幕的问题

10

Kivy ScreenManager不切换屏幕

10

如何与kivy切换屏幕?

112

Kivy屏幕未显示

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文