python - 将屏幕过渡方向应用于扩展面板和屏幕 kivy/kivymd 内的元素卡
问题描述
我是一个新程序员,正在开发一个Kivy
应用程序,我需要使用screens (screen manager)
,问题是我使用元素卡作为按钮,并且假设使用on_release
它时会改变屏幕,但是如果我包含root.manager.transition.direction = "left"
我得到错误 AttributeError: 'MyContentComunes' object has no attribute 'screen'
. 我不知道是否有人可以帮助我解决这个问题。
这是一段代码。
from kivy.app import App
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivymd.uix.expansionpanel import MDExpansionPanel, MDExpansionPanelTwoLine
from kivy.core.window import Window
from kivymd.color_definitions import colors
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.uix.screen import MDScreen
KV = '''
WindowManager:
id: screen_manager
PrincipalWindow:
LenghtWindow:
<PrincipalWindow>:
name: "principal"
BoxLayout:
MDToolbar:
title: "Conversor"
pos_hint: {"top": 1}
ScrollView:
pos_hint: {"center_x": .5, "center_y": .5} #Ubicación
size_hint: 0.90, 0.75
GridLayout:
halign: 'center'
cols: 1
adaptive_height: True
id: box
<LenghtWindow>:
name: "Lenght"
md_bg_color: 0.34,0.024,0.292,1
MDBoxLayout:
orientation: "vertical"
MDToolbar:
title: "Conversor"
pos_hint: {"top": 1}
Button:
text: "Back"
font_size: 32
on_release:
app.root.current = "principal"
root.manager.transition.direction = "right"
<MyContentComunes>:
orientation: 'vertical'
padding: dp(10)
spacing: dp(10)
size_hint_y: None
height: self.minimum_height
ElementCard:
image:"1490820814-13_82405.png"
text:"Longitud"
id:longitud
on_release:
app.root.current = "Lenght"
root.manager.transition.direction = "left"
<ElementCard@MDCard>:
md_bg_color: app.theme_cls.primary_color
padding: dp(15)
spacing: dp(15)
size_hint: 1, None
ripple_behavior: True
# on_release: print("worked")
image:''
text:""
items_count:""
subtext:''
orientation: "vertical"
Image:
source:root.image
halign:"center"
padding: dp (4)
spacing: dp(4)
MDBoxLayout:
orientation: "vertical"
MDLabel:
halign:"center"
text:root.text
MDLabel:
halign:"center"
font_style:"Caption"
text:root.subtext
'''
Window.size = 324, 720
class Conversor(MDApp):
def build(self):
self.theme_cls.primary_palette = "Blue"
return Builder.load_string(KV)
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.list_items = [] # Dictionary where the items are stored
self.category_list1 = ['Comunes']
def on_start(self):
for category in self.category_list1:
self.root.get_screen('principal').ids.box.add_widget(
MDExpansionPanel(
icon="3.png",
content=MyContentComunes(),
panel_cls=MDExpansionPanelTwoLine(
text=category,
secondary_text="Ver las unidades"
)
)
)
class MyContentComunes(BoxLayout):
pass
class PrincipalWindow(Screen):
pass
class LenghtWindow(Screen):
pass
class WindowManager(ScreenManager):
pass
Conversor().run()
元素卡在扩展面板内,扩展面板也在屏幕内。
解决方案
尝试添加Screen
到类MyContentComunes
。
class MyContentComunes(BoxLayout, Screen):
pass
我建议你像这样组织你的代码。它会让你的工作更轻松。
from kivy.app import App
from kivymd.app import MDApp
# import libraries ...
KV = '''
# Your KV File
'''
Window.size = 324, 720
class MyContentComunes(BoxLayout, Screen):
pass
class PrincipalWindow(Screen):
pass
class LenghtWindow(Screen):
pass
class WindowManager(ScreenManager):
pass
class Conversor(MDApp):
def build(self):
self.theme_cls.primary_palette = "Blue"
return Builder.load_string(KV)
def __init__(self, **kwargs):
# Code
.
.
.
def on_start(self):
# Code
.
.
.
Conversor().run()
推荐阅读
- entity-framework-core - 实体框架核心中的 HasDefaultSchema 在哪里?
- python-3.x - tensorflow gpu,集群中的python资源耗尽错误
- php - Yii2:在此服务器上找不到请求的 URL /site/login
- python - 熊猫就地应用更新但返回无
- java - 如何在我的 build.gradle 中反映 Java 版本 10
- arduino - ESP8266-01 不响应 AT 命令
- azure-data-factory - Azure 数据工厂将参数传递到复制任务
- swift - SKNode 在 Swift 4 中同步运行动作
- twitter-bootstrap - 如何在 octobercms 中使用 popper
- alloy - 模拟农民、山羊、卷心菜、狼拼图的方法?