1

如果您不确定它有什么 id,有没有办法检查或打印小部件 id?我有一个我制作的布局,它是一个简单的 BoxLayout,其中我的标签有它的 id(它在 kv 文件中完成),而不是我在 GridLayout 中多次使用该布局。现在我有多个标签,但从技术上讲,它们具有相同的 id,或者如果您多次使用,kivy 可能会更改 id?这就是我想通过打印他们的所有 ID 来检查的内容。

a3.py



from BareBones import Skeleton

menu = ['espresso', 'latte', 'capuccino', 'nescafe', 'Sahlep', 'Mahlep']
keys = []


class Double(BoxLayout):
    pass
class NewLayout(GridLayout):
    def set_text(self,text):
        print(self.root.ids.Skeleton.ids['label_id'].text)


    pass

class MainPage(BoxLayout):

    def __init__(self, **kwargs):
        super().__init__(**kwargs)


        iterator = 1



        for i in range(len(menu)):
            b = Button(size=(100,50))
            self.ids[str(iterator)] = b

            self.add_widget(b)

            keys.append(str(iterator))
            iterator = iterator+1
            print(keys)
            print(len(menu))

        for x, y in zip(menu, keys):
            self.ids[y].text = x


class RightSide(BoxLayout):

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.orientation='vertical'

        for i in range(len(menu)):
            self.add_widget(Skeleton())






kv = Builder.load_file("b3.kv")


class MainApp(App):
    def build(self):
        return kv

MainApp().run()

b3.kv

NewLayout:

    cols: 2
    MainPage:
    RightSide:



<MainPage>:
    orientation: 'vertical'



<Skeleton>
    b1: b1
    b2: b2
    label_id: label_id

    Button:
        id: b1
        text:'+'
        on_press: root.on_button_click_plus()

    Label:
        id: label_id


    Button:
        id: b2
        text:'-'
        on_press: root.on_button_click_minus()


裸机.py




class Skeleton(BoxLayout):
    count = 0
    my_text = ''
    drink_name = ''

    def on_button_click_plus(self):
        print("Button clicked")
        self.count += 1
        self.ids.label_id.text = str(self.count)
        self.my_text = str(self.count)
        return self.my_text
    def on_button_click_minus(self):
        print("Button clicked")
        self.my_text = str(self.count)
        self.ids.label_id.text = str(self.count)

        if self.count > 0:
            self.count -= 1
            self.ids.label_id.text = str(self.count)
        else:
            pass

    def trying(self):
        pass


class PlusMinus(BoxLayout):
    menu = ['espresso']
    keys = []

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.orientation='vertical'
        menu = self.menu

        self.add_widget(Skeleton())

所以这基本上看起来像这样: 图形用户界面

我基本上想要做的是有一个按钮来收集所有标签文本(数字),这样我就可以将它们与菜单数组配对,以了解其中有多少被添加到我们的购物篮中。我也想重置标签,但是我不知道如何获取代码中如此深入的文本。

4

2 回答 2

1

如果您在课堂上将drink_namea更改为:StringPropertySkeleton

class Skeleton(BoxLayout):
    count = 0
    my_text = ''
    drink_name = StringProperty('')

Skeleton并在创建每个实例时为该属性分配一个值:

class RightSide(BoxLayout):

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.orientation='vertical'

        for i in range(len(menu)):
            self.add_widget(Skeleton(drink_name=menu[i]))

然后你可以通过类中的方法获得添加的饮料数量MainPage

def tally(self):
    rightside = kv.ids.rightside
    for skel in rightside.children:
        if isinstance(skel, Skeleton):
            print(skel.drink_name, skel.ids.label_id.text)

加上另一项需要的更改。在您的 中,为实例kv添加一个:idRightSide

NewLayout:

    cols: 2
    MainPage:
    RightSide:
        id: rightside
于 2021-07-25T02:08:19.550 回答
0

错误 所以这是 Pycharm 显示的错误,kv 下的红色突出显示。

class MainPage(BoxLayout):                                                                                    
                                                                                                              
    def __init__(self, **kwargs):                                                                             
        super().__init__(**kwargs)                                                                            
                                                                                                              
                                                                                                              
        iterator = 1                                                                                          
                                                                                                              
                                                                                                              
                                                                                                              
        for i in range(len(menu)):                                                                            
            b = Button(size=(100,50))                                                                         
            self.ids[str(iterator)] = b                                                                       
                                                                                                              
            self.add_widget(b)                                                                                
                                                                                                              
            keys.append(str(iterator))                                                                        
            iterator = iterator+1                                                                             
            print(keys)                                                                                       
            print(len(menu))                                                                                  
                                                                                                              
        for x, y in zip(menu, keys):                                                                          
            self.ids[y].text = x                                                                              
                                                                                                              
    def tally(self):                                                                                          
        rightside = self.kv.ids.rightside                                                                     
        for skel in rightside.children:                                                                       
            if isinstance(skel, Skeleton):                                                                    
                kv = Builder.load_file("b3.kv")                                                               
                print(skel.drink_name, skel.ids.label_id.text)                                                
                                                                                                              
                                                                                                              
                                                                                                              
class RightSide(BoxLayout):                                                                                   
                                                                                                              
    def __init__(self, **kwargs):                                                                             
        super().__init__(**kwargs)                                                                            
        self.orientation='vertical'                                                                           
                                                                                                              
        for i in range(len(menu)):                                                                            
            self.add_widget(Skeleton(drink_name=menu[i]))                                                     
                                                                                                              
                                                                                                              
                                                                                                              
                                                                                                              
                                                                                                              
                                                                                                              
                                                                                                              
kv = Builder.load_file("b3.kv")                                                                               
                                                                                                              
                                                                                                              
                                                                                                              
                                                                                                              
                                                                                                              
class MainApp(App):                                                                                           
    def build(self):                                                                                          
        return kv                                                                                             
                                                                                                              
                                                                                                              
                                                                                                              
                                                                                                              
                                                                                                              
MainApp().run()                                                                                               

所以我更改了 Skeleton 文件中的 String 属性,代码看起来像你告诉我要添加的更改。但是什么也没发生,我如何实际使用 tally() 方法?

于 2021-07-25T03:14:25.643 回答