Kivy ids在python代码中

时间:2017-10-03 09:07:19

标签: python kivy

主:

function ajx(i) {
    return new Promise(function(resolve, reject){
        $.ajax({
            method: "GET",
            url: "/project/lots/"+announce+"/"+(i+1),
            async: false,
            beforeSend: function () {
                $("#console").append("<strong>Parsing lots from page "+(i+1)+"...</strong><br/>");
            },
            complete:function(){

            },
            success: function (m) {
                $("#console").append(m);
                addprogressstep();
                resolve(m);
            },
            error:function(jqXHR,  textStatus,  errorThrown){
                reject(jqXHR,  textStatus,  errorThrown);
            }
        });
    })    
}

那么如何访问textinput呢?我有id =&#39; test&#39;但是,当我打印布局ID时,我说我没有。为什么?有人可以解释我做错了什么,我怎么能把它变好呢?

1 个答案:

答案 0 :(得分:1)

来自functools的

导入部分

要访问外部方法中的textinput,可以使用部分函数或lambda函数。

self.ids

您收到无或空字典,因为您没有kv文件。

注意

当解析你的kv文件时,kivy会收集所有用id标记的小部件,并将它们放在这个self.ids字典类型属性中。

请参阅下面的示例了解deatils。

实施例

main.py

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from functools import partial


class testclass:
    def someth(*args, txt):
        print(txt)


class BeginScreen(Screen):
    def __init__(self, **kwargs):
        super(BeginScreen, self).__init__(**kwargs)
        layout = BoxLayout(orientation='vertical', padding=20, spacing=5)
        layout.add_widget(Label(text=str('Hello')))
        layout.add_widget(TextInput(id='test', text=''))
        layout.add_widget(Button(text='Button!', on_press=partial(testclass.someth, txt='?')))
        self.add_widget(layout)
        print("self.ids={}".format(self.ids))


class TestApp(App):
    from kivy.config import Config
    Config.set('graphics', 'width', '800')
    Config.set('graphics', 'height', '400')

    def build(self):
        sm = ScreenManager()
        sm.add_widget(BeginScreen(name='test'))
        return sm

TestApp().run()

输出

Button Pressed