【发布时间】:2021-11-07 15:58:53
【问题描述】:
我希望在单击 MDList 项目时更改屏幕。我还想将项目的信息传递到新屏幕中。
这是我目前的代码:
main.py
from kivy.lang import Builder
from kivymd.uix.screen import Screen
from kivy.uix.screenmanager import ScreenManager
from kivymd.app import MDApp
from kivymd.uix.list import MDList, ThreeLineListItem, ThreeLineAvatarIconListItem
from kasa import Discover
from decimal import Decimal
import asyncio
from pathlib import Path
class Device(Screen):
pass
sm = ScreenManager()
sm.add_widget(Device(name='screen1'))
class Test(MDApp):
def build(self):
return Builder.load_file('app.kv')
def on_start(self):
devices = asyncio.run(Discover.discover())
for addr, dev in devices.items():
asyncio.run(dev.update())
self.root.ids.devices.add_widget(
ThreeLineAvatarIconListItem(text=dev.alias,
secondary_text="Current Power: %.2f" % Decimal(dev.emeter_realtime['power_mw'] / 10) + " mW",
tertiary_text="Current Runtime: " + dev.on_since.strftime("%H:%M:%S"),
))
Test().run()
app.kv
#: import SlideTransition kivy.uix.screenmanager.SlideTransition
<Manager>:
id: sm
Device:
id: device_screen
<Device>:
name: 'screen1'
MDRectangleFlatButton:
text: 'Test'
pos_hint: {'center_x':0.5, 'center_y': 0.5}
on_press: root.manager.current = 'screen 2'
MDBoxLayout:
orientation:'vertical'
MDToolbar:
title: 'SaveSmart'
md_bg_color: .2, .2, .2, 1
MDBottomNavigation:
panel_color: .2, .2, .2, 1
MDBottomNavigationItem:
name: 'screen 4'
text: 'Dashboard'
GridLayout:
id: readings
col: 2
MDBottomNavigationItem:
name: 'screen 3'
text: 'Devices'
ScrollView:
MDList:
id: devices
MDBottomNavigationItem:
name: 'screen 1'
text: 'Predictions'
ScrollView:
MDList:
OneLineListItem:
text: "Predictions go here!"
on_release: app.root.current = 'screen1'
MDBottomNavigationItem:
name: 'screen 2'
text: 'Recommendations'
MDLabel:
text: 'Recommendations'
halign:'center'
我尝试使用 app.root.current 但它不起作用。该程序编译,但每当我点击“预测到这里!”它不会带我进入新页面。
【问题讨论】:
标签: python kivy kivy-language kivymd