Python - Kivy - 屏幕一出现就隐藏一个小部件
Python - Kivy - Hiding a widget as soon as screen shows up
我想在屏幕出现后立即隐藏下面代码中的进度条。为此,我定义了一个 hide_widget 函数并将代码添加到“on_pre_enter”部分。但是它不起作用。我在这里错过了什么?
顺便介绍一下在kivy中隐藏widget的更简洁的方法,也非常欢迎。
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
Builder.load_string("""
<MyLayout>
BoxLayout:
orientation: "vertical"
size: root.width, root.height
spacing: 20
padding: 50
Button:
text: "Test"
ProgressBar:
id: pgb_excel_read
min: 0
max: 100
value: 0
size_hint: ( 1, 0.1)
""")
def hide_widget(wid, dohide=True):
if hasattr(wid, 'saved_attrs'):
if not dohide:
wid.height, wid.size_hint_y, wid.opacity, wid.disabled = wid.saved_attrs
del wid.saved_attrs
elif dohide:
wid.saved_attrs = wid.height, wid.size_hint_y, wid.opacity, wid.disabled
wid.height, wid.size_hint_y, wid.opacity, wid.disabled = 0, None, 0, True
class MyLayout(Widget):
def on_pre_enter(self, *args):
hide_widget(self.ids.pgb_excel_read, True)
class MyApp(App):
def build(self):
return MyLayout()
if __name__ == '__main__':
MyApp().run()
on_pre_enter
功能仅适用于 Screen
类。但是您尝试在您的自定义 Widget 中使用它。所以没有什么可以触发这个功能。我们可以通过__init__
:
触发
class MyLayout(Widget):
def __init__(self):
super(MyLayout, self).__init__()
hide_widget(self.ids.pgb_excel_read, True)
要隐藏任何小部件,我们只需要更改两件事:
- 已禁用:正确
- 不透明度:0
这样做的捷径,让我们停止触发任何函数,只更改变量:(同时删除 hide_widget
函数)
class MyLayout(Widget):
def __init__(self):
super(MyLayout, self).__init__()
# hide_widget(self.ids.pgb_excel_read, True)
self.ids.pgb_excel_read.opacity = 0
self.ids.pgb_excel_read.disabled = True
我想在屏幕出现后立即隐藏下面代码中的进度条。为此,我定义了一个 hide_widget 函数并将代码添加到“on_pre_enter”部分。但是它不起作用。我在这里错过了什么?
顺便介绍一下在kivy中隐藏widget的更简洁的方法,也非常欢迎。
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
Builder.load_string("""
<MyLayout>
BoxLayout:
orientation: "vertical"
size: root.width, root.height
spacing: 20
padding: 50
Button:
text: "Test"
ProgressBar:
id: pgb_excel_read
min: 0
max: 100
value: 0
size_hint: ( 1, 0.1)
""")
def hide_widget(wid, dohide=True):
if hasattr(wid, 'saved_attrs'):
if not dohide:
wid.height, wid.size_hint_y, wid.opacity, wid.disabled = wid.saved_attrs
del wid.saved_attrs
elif dohide:
wid.saved_attrs = wid.height, wid.size_hint_y, wid.opacity, wid.disabled
wid.height, wid.size_hint_y, wid.opacity, wid.disabled = 0, None, 0, True
class MyLayout(Widget):
def on_pre_enter(self, *args):
hide_widget(self.ids.pgb_excel_read, True)
class MyApp(App):
def build(self):
return MyLayout()
if __name__ == '__main__':
MyApp().run()
on_pre_enter
功能仅适用于 Screen
类。但是您尝试在您的自定义 Widget 中使用它。所以没有什么可以触发这个功能。我们可以通过__init__
:
class MyLayout(Widget):
def __init__(self):
super(MyLayout, self).__init__()
hide_widget(self.ids.pgb_excel_read, True)
要隐藏任何小部件,我们只需要更改两件事:
- 已禁用:正确
- 不透明度:0
这样做的捷径,让我们停止触发任何函数,只更改变量:(同时删除 hide_widget
函数)
class MyLayout(Widget):
def __init__(self):
super(MyLayout, self).__init__()
# hide_widget(self.ids.pgb_excel_read, True)
self.ids.pgb_excel_read.opacity = 0
self.ids.pgb_excel_read.disabled = True