【发布时间】:2020-09-24 12:39:37
【问题描述】:
我遇到了一个奇怪的错误,我花了一整天的时间,仍然无法修复这个错误。我不知道如何访问值?
你能告诉我如何访问来自ScreenManager 的值,我做错了什么吗?
错误-
Traceback (most recent call last):
File "/home/rohit/Desktop/itube/main.py", line 111, in <module>
Itube().run()
File "/home/rohit/Desktop/itube/main.py", line 50, in __init__
caller=self.root.get_screen("homescreen").ids.video_quality,
AttributeError: 'NoneType' object has no attribute 'get_screen'
Main.py
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.core.window import Window
from kivymd.uix.filemanager import MDFileManager
from kivymd.toast import toast
from youtube_dl import kv
from kivymd.uix.menu import MDDropdownMenu
Window.size = (450, 740)
class HomeScreen(Screen):
pass
class SigninScreen(Screen):
pass
sm = ScreenManager()
sm.add_widget(HomeScreen(name='homescreen'))
sm.add_widget(SigninScreen(name='signinscreen'))
class Itube(MDApp):
def __init__(self, **kwargs):
super().__init__(**kwargs)
Window.bind(on_keyboard=self.events)
self.path = '/home/rohit'
self.manager_open = False
self.file_manager = MDFileManager(
exit_manager=self.exit_manager,
select_path=self.select_path,
previous=True,
)
video_quality_options = [{'text': f'items {i}'} for i in range(5)]
self.dropdown_item = MDDropdownMenu(
caller=self.root.get_screen("homescreen").ids.video_quality,
items = video_quality_options,
width_mult=3,
)
self.dropdown_item.bind(on_release=self.menu_callback)
def menu_callback(self, instance_menu, instance_menu_item):
print(instance_menu, instance_menu_item)
def option_callback(self, text_of_the_option):
print(text_of_the_option)
def file_manager_open(self):
self.file_manager.show(self.path) # output manager to the screen
self.manager_open = True
def select_path(self, path):
self.exit_manager()
toast(path)
def exit_manager(self, *args):
self.manager_open = False
self.file_manager.close()
def events(self, instance, keyboard, keycode, text, modifiers):
'''Called when buttons are pressed on the mobile device.'''
if keyboard in (1001, 27):
if self.manager_open:
self.file_manager.back()
return True
def build(self):
self.main_screen = Screen()
self.theme_cls.primary_palette = "Red"
helper_string = Builder.load_string(kv)
self.main_screen.add_widget(helper_string)
return self.main_screen
if __name__ == "__main__":
Itube().run()
youtube_dl.py
kv = """
ScreenManager:
HomeScreen:
SigninScreen:
<HomeScreen>:
name: 'homescreen'
video_quality: video_quality
MDBoxLayout:
orientation: 'vertical'
spacing: 20
padding: 40
MDTextFieldRound:
hint_text: 'Url'
multline: False
normal_color: (1, 1, 1, 100)
color_active: (232/255, 232/255, 232/255, 600)
MDBoxLayout:
orientation: 'horizontal'
adaptive_size: True
spacing: 22
pos_hint: {'center_x': 0.5, 'center_y': .99}
MDRaisedButton:
text: 'Import from computer'
icon: "folder"
elevation_normal: 10
on_release: app.file_manager_open()
MDRaisedButton:
text: 'Import from itube cloud'
elevation_normal: 10
MDDropdownMenu:
id: video_quality
text: 'Select Quality'
elevation_normal: 10
on_release: app.dropdown_item.open()
MDLabel:
MDFloatingActionButton:
icon: 'archive-arrow-down'
elevation_normal: 10
md_bg_color: app.theme_cls.primary_color
pos_hint: {'center_x': .9, 'center_y': .5}
<SigninScreen>:
name: 'signinscreen'
"""
【问题讨论】:
标签: python python-3.x kivy kivymd