首页 > 解决方案 > 在kivy中访问类之间的对象属性

问题描述

此处的这段代码创建了一个按钮的滚动视图,以允许我从不同的“票证”列表中进行选择

    SearchResultButton(Button(text=str(Datarray2[i]),id=str(Datarray2[i]),on_press=self.Pressbtn ))
self.ids.SearchResult.add_widget(SearchResultButton)

从那里它打开这个函数,它应该设置一个变量(在本例中为“UpdateTicketNum”),该变量将在另一个函数中用于在另一个屏幕中设置标签文本。

def Pressbtn(self, SearchResultButton):
    global UpdateTicket
    UpdateTicket = OPENTicket
    woo = SearchResultButton.text
    print(SearchResultButton.text)
    wow = [blank.strip() for blank in woo.split(',')]
    print("\n\n\n\n")
    global UpdateTicketNum
    UpdateTicketNum = (wow[0])

    self.manager.get_screen('UpdateTicket').UpdateOpen()

此时它会打开 sqlite DB 并仔细检查 TicketNumber 是否有效。尝试访问 kv 构建中的标签时出现问题

def UpdateOpen(self):
    print("TESTSETST")
    conn = sqlite3.connect('TicketData.db', timeout=10)
    UD = conn.cursor()


    UD.execute('SELECT TicketNumber FROM TicketData WHERE TicketNumber = ?',(UpdateTicketNum,))
    tips = UD.fetchone()
    print(tips[0])
    tipsy = tips[0]

    UpdatedLabelTexT = tipsy
    sm.current=('UpdateTicket')
    UpdateTicket.ids.UpdateLabels['text']=(UpdatedLabelTexT)

UpdateTicket.ids.UpdateLabels['text']=UpdatedLabelText] 字段始终声称是滚动视图按钮的属性,即使我在另一个类中使用不同的参数对其进行初始化。如果这个问题格式不正确,我们深表歉意。但是 3 天的垂死试图弄清楚这一点,我突然崩溃了。

这是KV中的位

<UpdateTicket>
name: 'UpdateTicket'
on_enter:
    root.UpdateOpen()

orientation: "vertical"
FloatLayout:
    canvas.before:
        Color:
            rgba: .0, .6, 1, 1
        Rectangle:  
            pos: self.pos
            size: self.size
            source: "lights.jpg"
Label:
    id: UpdateLabels
    text: "filler"
    multiline: False
    size_hint: (None, None)
    size: (root.width/5,root.height/20)
    pos_hint:{'center_x': .5,'center_y': .5 }

以及我如何初始化屏幕

sm.add_widget(UpdateTicket(name='UpdateTicket'))

标签: sqlitekivypython-3.6

解决方案


我找到了适合我的解决方案。首次初始化应用程序类 SampleApp(App) 时返回 sm(构建应用程序)

我需要用

    global root
    return sm

    root = ScreenManager()
    return root

这似乎解决了我的问题。谢谢阅读


推荐阅读