Как разместить изображение в kivy, используя язык python?

Как расположить изображение с помощью python, а не на языке kivy (файлы .kv)?

Моя работа заключается в следующем.

import kivy
kivy.require('1.8.0') # current kivy version
import ConfigParser

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.image import Image





class login(Widget):
    #checking to see if the user logging in has privilage to access program
    def validate(self, *args):

        username = self.ids['user']
        user = username.text
        config = ConfigParser.ConfigParser()
        config.read('Privilage.cfg')
        if not config.has_section('users'):
            print 'the Privilage.cfg file has been tampered with'

        if not config.has_option('users',user):
            print 'user is not listed'
        else:
            userPriv = config.get('users',user)
            print 'user',user,'has privilage',userPriv
            with self.canvas:
                Image(source='/Users/Kevin/Desktop/Python-extras/SSS Assistant/Manager_images/check-icon.png',pos=self.pos,size=self.size)



class DataApp(App):
    def build(self):
        return login()


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

Моя цель - проверить, существует ли пользователь, а затем поставить галочку в поле имени пользователя, если он существует, а затем позже (пока без кода) проверить соответствующий пароль (пока без кода). Я не хотел кодировать, что произойдет, если проверка не пройдена или пароль еще не совпадает, потому что, если я не могу изменить положение изображения, в этом нет смысла.

В настоящее время изображение появляется прямо в центре и очень большое (мне тоже нужно его уменьшить). Я искал Kivy API в kivy.uix.image.Image и не могу найти решение (искал изменение позиции или такие вещи как center_x и не могу найти). Я пытаюсь сделать это в python, потому что я помещаю конструктор изображения в оператор if, и я не уверен, что файлы .kv могут это сделать, поскольку они контролируют свойства.

** Меня интересует строка:

with self.canvas:
    Image(source="path",pos=self.pos,size=self.size)

Вот прилагаемый файл kivy на всякий случай:

#:kivy 1.8.0

<login>:
    canvas:
        Rectangle:
            source:"/Users/Kevin/Desktop/Python-extras/SSS Assistant/Manager_images/background.jpg"
            pos: self.pos
            size: self.size
    Label:
        center_x: root.width / 2
        top: (root.top/2) + 150
        text: 'Please login with your ID and password'
    Label:
        center_x: (root.width/2)-130
        top: (root.top/2)+110
        text: 'Username:'
    Label:
        center_x: (root.width/2)-130
        top: (root.top/2)+83
        text: 'Password:'
    TextInput:
        id: user
        center_x: (root.width/2) +10
        top:(root.top/2)+75
        size_hint: None, None
        size: 200, 30
        max_lines: 1
        valign: 'middle'
        halighn: 'center'
        font_size: 15
        multiline: False
        on_text_validate: root.validate()
    TextInput:
        id: password
        center_x: (root.width/2) +10
        top:(root.top/2)+45
        size_hint: None, None
        size: 200, 30
        max_lines: 1
        valign: 'middle'
        halighn: 'center'
        font_size: 15
        multiline: False
        password: True

Заранее спасибо!


person Bystander001    schedule 17.06.2014    source источник


Ответы (1)


with self.canvas:
    Image(source="path",pos=self.pos,size=self.size)

Изображение — это виджет, а не инструкция холста. Вы должны добавить его с помощью self.add_widget и вообще не использовать холст.

Я думаю, что вы также немного изобретаете колесо со всеми инструкциями по положению и размеру в kv, вам может быть проще использовать классы макета kivy, чтобы управлять большей частью этого для вас.

person inclement    schedule 17.06.2014
comment
Я сделал это: self.add_widget( Image( source=/Users/Kevin/Desktop/Python-extras/SSS Assistant/Manager_images/check-icon.png, size=(20, 20), pos=((self.width )/2,(self.top)/2))) позиция все равно не изменится. Я хочу, чтобы галочка была справа от первого поля, но галочка появляется в разных точках на странице в зависимости от размера страницы. - person Bystander001; 18.06.2014