Kivy Python:可变的内部折叠,使用折叠式菜单

2024-10-03 23:30:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个手风琴菜单(no.1),其中有另一个手风琴菜单(no.2)。 2号手风琴的大小将由用户定义(结果示例如图所示)。 enter image description here

问题是,虽然我已经成功地创建了一个类来创建accordion no.2,但是我似乎找不到在屏幕上显示它的方法。在

这是我的py代码:

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.accordion import Accordion, AccordionItem
from kivy.properties import NumericProperty

wide = 0
long = 0

class AccordionClass():
    def calc(val):
        number = val
        root = Accordion(size= (200,700), pos = (50,80), orientation= 'vertical')
        for x in range(number):
            print ('x = ',x)
            item = AccordionItem(title='Title %d' % x)
            item.add_widget(Label(text='Very big content\n' * 10))
            root.add_widget(item)
        print ('END')
        return root        

class LoginScreen(GridLayout):    
    numOfStories = NumericProperty()    
    def printTxt(self, text, TextInputId):
        pass

    def addFloor(self,text):
        self.numOfStories = int(text)
        print ('self.numOfStories = ', self.numOfStories)  
        rootAc = AccordionClass.calc(self.numOfStories)
        return rootAc
    pass

class screen2(App):
    def build(self):
        self.root = GridLayout()
        return LoginScreen()

if __name__ == "__main__":
    screen2().run()  

我的kv代码:

^{pr2}$

你知道怎么解决这个问题吗? 谢谢


Tags: textfromimportselfreturndefrootitem
1条回答
网友
1楼 · 发布于 2024-10-03 23:30:38

它不会显示是因为您将Accordion的一个实例返回到addFloor/calc中的任何内容中。要创建一个小部件,您必须调用<parent>.add_widget(<widget>),所以让我们这样做:

on_text_validate: root.add_widget(root.addFloor(NumOfStories.text))

现在你的calc()是一个类方法,你要么需要使用self作为一个附加参数(并且有更多的混乱),要么使用@staticmethod修饰符,它使calc()没有类内容,并允许你这样使用它Class.method(...)

^{pr2}$

之后,将出现一个新的Accordion,但大小和位置由您决定。另外,在默认情况下,该小部件可能没有背景,因此您将通过canvas instructions将其放在那里。在

相关问题 更多 >