如何删除kivy中的按钮
How can I remove a button in kivy
我是 kivy 的新手,我想让“dropbutton”和“startbutton”在按下“startbutton”时消失,但我不知道该怎么做.
我尝试了 self.remove_widget(self.startbutton) 但它给了我一个错误:
" AttributeError: 'MainApp' 对象没有属性 'remove_widget' "
from kivy.app import App
from kivy.uix.dropdown import DropDown
from kivy.uix.button import Button
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
import random
Builder.load_string("""
<CustomDropDown>
Button:
text: "Nobara"
size_hint_y: None
height: 44
on_release: root.select("Nobara")
Button:
text: "Maki"
size_hint_y: None
height: 44
on_release: root.select("Maki")
""")
class CustomDropDown(DropDown):
pass
class MainApp(App):
def build(self):
startbutton = Button(text='Start',
size_hint=(.2, .2),
pos_hint={'center_x': .5, 'center_y': .5})
startbutton.bind(on_press=self.on_press_button)
dropbutton = Button(text='Karakter',
size_hint=(.2, .2),
pos_hint={'center_x': .50, 'center_y': .5})
dropdown = CustomDropDown()
dropbutton.bind(on_release=dropdown.open)
dropdown.bind(on_select = lambda instance, x : setattr(dropbutton, 'text', x))
dropdown.bind(on_select = lambda instance, x : karaktervalasztas(x))
boxlayout = BoxLayout()
boxlayout.add_widget(startbutton)
boxlayout.add_widget(dropbutton)
return boxlayout
def on_press_button(self, instance):
### the code to remove both the startbutton and the dropbutton
start()
只需保留对这些按钮的引用,然后使用这些引用将其删除。在您的 build()
方法中:
def build(self):
self.startbutton = Button(text='Start',
size_hint=(.2, .2),
pos_hint={'center_x': .5, 'center_y': .5})
self.startbutton.bind(on_press=self.on_press_button)
self.dropbutton = Button(text='Karakter',
size_hint=(.2, .2),
pos_hint={'center_x': .50, 'center_y': .5})
dropdown = CustomDropDown()
self.dropbutton.bind(on_release=dropdown.open)
dropdown.bind(on_select=lambda instance, x: setattr(self.dropbutton, 'text', x))
dropdown.bind(on_select=lambda instance, x: karaktervalasztas(x))
boxlayout = BoxLayout()
boxlayout.add_widget(self.startbutton)
boxlayout.add_widget(self.dropbutton)
return boxlayout
然后你的on_press_button()
可以是:
def on_press_button(self, instance):
self.root.remove_widget(self.startbutton)
self.root.remove_widget(self.dropbutton)
我是 kivy 的新手,我想让“dropbutton”和“startbutton”在按下“startbutton”时消失,但我不知道该怎么做.
我尝试了 self.remove_widget(self.startbutton) 但它给了我一个错误: " AttributeError: 'MainApp' 对象没有属性 'remove_widget' "
from kivy.app import App
from kivy.uix.dropdown import DropDown
from kivy.uix.button import Button
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
import random
Builder.load_string("""
<CustomDropDown>
Button:
text: "Nobara"
size_hint_y: None
height: 44
on_release: root.select("Nobara")
Button:
text: "Maki"
size_hint_y: None
height: 44
on_release: root.select("Maki")
""")
class CustomDropDown(DropDown):
pass
class MainApp(App):
def build(self):
startbutton = Button(text='Start',
size_hint=(.2, .2),
pos_hint={'center_x': .5, 'center_y': .5})
startbutton.bind(on_press=self.on_press_button)
dropbutton = Button(text='Karakter',
size_hint=(.2, .2),
pos_hint={'center_x': .50, 'center_y': .5})
dropdown = CustomDropDown()
dropbutton.bind(on_release=dropdown.open)
dropdown.bind(on_select = lambda instance, x : setattr(dropbutton, 'text', x))
dropdown.bind(on_select = lambda instance, x : karaktervalasztas(x))
boxlayout = BoxLayout()
boxlayout.add_widget(startbutton)
boxlayout.add_widget(dropbutton)
return boxlayout
def on_press_button(self, instance):
### the code to remove both the startbutton and the dropbutton
start()
只需保留对这些按钮的引用,然后使用这些引用将其删除。在您的 build()
方法中:
def build(self):
self.startbutton = Button(text='Start',
size_hint=(.2, .2),
pos_hint={'center_x': .5, 'center_y': .5})
self.startbutton.bind(on_press=self.on_press_button)
self.dropbutton = Button(text='Karakter',
size_hint=(.2, .2),
pos_hint={'center_x': .50, 'center_y': .5})
dropdown = CustomDropDown()
self.dropbutton.bind(on_release=dropdown.open)
dropdown.bind(on_select=lambda instance, x: setattr(self.dropbutton, 'text', x))
dropdown.bind(on_select=lambda instance, x: karaktervalasztas(x))
boxlayout = BoxLayout()
boxlayout.add_widget(self.startbutton)
boxlayout.add_widget(self.dropbutton)
return boxlayout
然后你的on_press_button()
可以是:
def on_press_button(self, instance):
self.root.remove_widget(self.startbutton)
self.root.remove_widget(self.dropbutton)