【发布时间】:2021-08-21 06:52:36
【问题描述】:
在此代码中,在按下按钮“CREATE”时,会创建三个按钮“Remove”、“Btn1”、“Btn2”... 在按下“Remove”按钮时,所有三个按钮(“Remove”、“Btn1 ","Btn2") 应该被删除。 我尝试了很多方法,但找不到使新按钮可以访问同一类下的其他功能的方法。
主代码:
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.togglebutton import ToggleButton
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.uix.screenmanager import Screen,ScreenManager
class Main(Screen):
def remove(self):
self.ids.Fl.remove_widget(Btnremove)
self.ids.Fl.remove_widget(Btn1)
self.ids.Fl.remove_widget(Btn2)
def addme(self):
Btnremove=Button(text="Remove",font_size=18,size_hint=(.2,.1),pos_hint={"center_x": .5, "center_y": .7})
Btn1=Button(text= "Btn1",font_size=18,size_hint=(.2,.1),pos_hint={"center_x":.4,"center_y":.2})
Btn2=Button(text="Btn2",font_size=18,size_hint=(.2, .1),pos_hint={"center_x": .6, "center_y": .2})
self.ids.Fl.add_widget(Btnremove)
self.ids.Fl.add_widget(Btn1)
self.ids.Fl.add_widget(Btn2)
Btnremove.bind(on_press=self.remove())
class Manager(ScreenManager):
pass
kv=Builder.load_file("test2.kv")
screen=Manager()
screen.add_widget(Main(name="main"))
class Test(App):
def build(self):
return screen
Test().run()
Kv 代码:
<Main>:
name: "main"
FloatLayout:
id: Fl
Button:
id: create
text: "CREATE"
size_hint: (.55,.175)
pos_hint: {"center_x":.5,"center_y":.5}
on_press:
root.addme()
【问题讨论】:
-
如果该布局仅包含这三个按钮,则使用
self.ids.Fl.clear_widgets() -
但是主按钮不会也被删除......我需要它是一个循环......当我按下主按钮“CREATE”时,三个新的btns被创建......打开按下新 btns 之一“Btnremove”...只会删除创建的 3 个新按钮,而不是主按钮...
-
去掉所有按钮后,重新添加主按钮即可。
-
我的实际代码要复杂得多...但功能是相同的...这就是为什么我需要它以与我相同的方式工作...再次动态添加按钮不会接受我提出的功能。据我所知,它仅适用于 kv 代码
-
只是好奇:你问的similar question有什么不同?
标签: python kivy kivy-language