如何使用 python 语言在 kivy 中定位图像?

Posted

技术标签:

【中文标题】如何使用 python 语言在 kivy 中定位图像?【英文标题】:How do I position an image in kivy using the python language? 【发布时间】:2014-08-06 22:04:54 【问题描述】:

如何使用 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.uix.image.Image 中搜索了 Kivy API,但找不到解决方案(搜索位置变化或 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

提前致谢!

【问题讨论】:

【参考方案1】:
with self.canvas:
    Image(source="path",pos=self.pos,size=self.size)

图像是 Widget,而不是画布指令。您应该使用self.add_widget 添加它,并且根本不使用画布。

我认为你也在重新发明***,使用 kv 中的所有位置和大小指令,你可能会发现使用 kivy 的布局类更容易为你管理大部分内容。

【讨论】:

我做到了: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))) pos 仍然不会改变。我希望检查在第一个框的右侧,但检查显示在页面上的不同点,具体取决于页面的大小。 我遇到了与add_widget 相同的问题,它似乎并不关心 pos 参数。我意识到你推荐使用 kv 语言(很多人也这样做),但我仍在尝试用纯 python 做所有事情。这绝对是一场艰苦的战斗......

以上是关于如何使用 python 语言在 kivy 中定位图像?的主要内容,如果未能解决你的问题,请参考以下文章

在 KV 语言中使用 Kivy Garden Graph

如何在 Kivy 语言导入中使用别名?

如何使用 KV 语言在 Kivy 中制作自定义按钮?

如何在 kivy python 中使用 size_hint 制作标签

Python Kivy 实时图表

如何在kivy中制作圆形进度条?