0

我正在制作一个选择应用程序。我正在使用微调器进行多项选择。在微调器选择之后,我想添加 3 个与微调器选择相关的不同按钮。在微调器的每个选择中,这些旧按钮都会替换为新按钮。

到目前为止,我可以在每次选择后添加不同的按钮。但是,按钮不断添加。每次选择微调器后,我都需要先清除旧按钮。

我的课程包含按钮是“ModelSpecifications”。

长话短说,clear_widgets() 有问题。它无法达到“ModelSpecifications”。

这是我的 main.py;

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.scrollview import ScrollView
from kivy.uix.spinner import Spinner
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.properties import ObjectProperty, StringProperty, BooleanProperty
from kivy.properties import ListProperty
from collections import OrderedDict

data1=["mother","father","son"]
data2=["uncle","aunt","grandfather"]
data3=["jack","mike","simon"]
data4=["1898","1975","1985","1885"]

class MainWidget(Widget):

    an0=tuple(list(OrderedDict.fromkeys(data1)))
    cal5= ObjectProperty()

    def btn10(self,text):

    #----------here is the part I want to clear the buttons first:

        #ModelSpecifications.clear_widgets(ModelSpecifications)

        # or

        #self.ids["anss"].clear_widgets()

        # after that I will add new buttons:
    
        self.cal5 =ModelSpecifications()


        a=data2
        b=data3
        c=data4

        mi=[]
        n=0

        while n < len(a):
            aba=(str(a[n])+"\n"+str(b[n])+"\n"+str(c[n]))
            mi.append(aba)
            n+=1

        for i in mi:
            self.b1=Button(text=str(i),size_hint=(1,None),height="100dp")
            self.cal5.add_widget(self.b1)
        self.ids.scd.add_widget(self.cal5, index=3) #here id.scd is the class that ModelSpecifications class is added. And it works fine.

class SecondPage(ScrollView):
    pass

class ModelSpecifications(BoxLayout): #this is the class I want add after my spinner selection 
    pass

class Calculation(GridLayout):
    pass   

class MyApp(App):
    pass

MyApp().run()

这是 my.kv ;

MainWidget:
<MainWidget>:
    ScreenManager:
        id: scmanager
        size: root.width, root.height
        Screen:
            id: scndpage
            name: "second"
            SecondPage:
                Calculation:
                    id:scd            
                    cols:1 
                    height: self.minimum_height 
                    row_default_height: "70dp"
                    size_hint_y: None
                    spacing:"10dp"
                    canvas.before:
                        Rectangle:
                            pos: self.pos
                            size: self.size
                    BoxLayout:

                        size_hint: 1, None
                        height: "50dp"
                        
                        pading:"10dp"
                        spacing:"10dp"
                        orientation: "vertical"
                        BoxLayout:
                            orientation: "horizontal"
                            Label:
                                text:"Name:"
                                color: 0,0,0,1
                            TextInput:
                                text:"---"
                                color: 0,0,0,1
                            Label:
                                text:"Surname:"
                                color: 0,0,0,1
                            TextInput:
                                text:"-----"
                                color: 0,0,0,1
                    BoxLayout:
                        id:scdd
                        size_hint: 1, 1
                        height: "100dp"
                        orientation: "vertical"
                        BoxLayout:
                            size_hint: 1, None
                            height: "50dp"
                            orientation: "horizontal"
                            Label:
                                text: " Sellection:"
                                color: 0,0,0,1
                            Spinner:
                                text: 'Home'
                                values: root.an0
                                on_text: app.root.btn10(self.text)                                       
                    
                    Button:
                        text:" Calculate"

                    Button:
                        text:"Sellect"
                    
                    Button:
                        text:"Back"

    
<ModelSpecifications>:      
    id:anss                 #HERE IS MY CLASS THAT I WANT TO CLEAR AND ADD AFTER EVERY SPINNER SELECTION
    pading:"10dp"
    spacing:"10dp"
    size_hint: 1, None
    height: "100dp"
    orientation: "horizontal"

当您运行此代码时,请在微调器中选择一些东西。您会在每个选择中看到,应用程序不断添加更多按钮;

在此处输入图像描述

4

1 回答 1

0

在您的btn10()方法中,只需添加:

    if self.cal5:
        self.cal5.parent.remove_widget(self.cal5)

行前:

    self.cal5 = ModelSpecifications()
于 2021-10-10T02:07:32.273 回答