与python和Kivy挣扎

时间:2016-01-27 17:19:41

标签: python kivy

我正在学习python和Kivy,我真的很难理解如何通过Kivy GUI调用函数和继续函数。

这是我的.py:

import csv
import os
import easygui
import kivy
kivy.require('1.0.7')

from kivy.app import App
from kivy.animation import Animation
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput

def csvImport(filename):
    with open(filename, 'rb') as f:
        reader = csv.reader(f)
        your_list = list(reader)
        return your_list

class LoadFile(App):
    def FileLoadScreen(self):
        self.add_widget(Button(size_hint_y=(None), height=('48dp'), text='Select File',
                    on_press=self.ImportFile))

    def ImportFile(self, instance):
        filepath = easygui.fileopenbox()
        if filepath!='.':
            a=csvImport(filepath)
            instance.text='File Loaded'
            instance.disabled=True

class loginBAKApp(App):
    def logAuth(username,password):
        if username!='' and password!='':
            print('ok')
    kv_directory = 'GUI'

if __name__ == '__main__':
    loginBAKApp().run()

这是我的loginBAK.kv:

#:kivy 1.9.0
GridLayout:
    row_force_default: True
    row_default_height: 40
    rows: 3
    cols: 2
    padding: 10
    spacing: 10
    Label:
        id: userLabel
        text: 'Username:'
    TextInput:
        id: username
    Label:
        id: passwordLabel
        text: 'Password:'
    TextInput:
        id: password
        password: True
    Button:
        id:btn_login
        text: 'Login'
        on_press: print('OK')

此代码似乎没有问题(当我点击登录按钮时,它会打印'确定'。我尝试将其与

交换
on_press: logAuth(username,password)

我收到一个错误,即没有定义logAuth。

最终,我在这里尝试建模(作为我的第一次学习体验)是点击登录按钮,只要字段不为空,显示登录成功消息5秒然后删除字段并调用LoadFile应用程序(添加一个可以单击以选择和导入文件的按钮)。

我到底错在了什么?我已经在线筛选了大约60个脚本,并且几个小时都在查看Kivy示例,我无法弄清楚我是如何做错的。有人能指出我正确的方向和/或提出关于创建/删除gui以做我所描述的建议的建议吗?我是Kivy的新手(并且可以编写基本的python脚本代码),所以当我在stackoverflow上阅读其他一些问题时,这有点令人困惑。

1 个答案:

答案 0 :(得分:2)

on_press: logAuth(username,password)

logAuth是app类的一种方法,而不是kv名称空间中定义的函数。您可以使用app.logAuth(...)app是引用当前App实例的关键字。