从画廊 Python Kivy for Android 中选择图像
Posted
技术标签:
【中文标题】从画廊 Python Kivy for Android 中选择图像【英文标题】:Select images from gallery Python Kivy for Android 【发布时间】:2020-05-20 19:21:17 【问题描述】:当我单击 Python Kivy 的按钮时,我可以从图库中加载图像吗?我是初学者,网上找不到例子。
我想做一个简单的应用程序,你需要从手机中选择一张图片并显示在屏幕上。
例如,打开这样的菜单:
Example
我找到了设备上所有目录的文件选择器示例,但它在 android 上不起作用(当我尝试打开某个目录时应用程序终止)
Python:
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.factory import Factory
from kivy.properties import ObjectProperty
from kivy.uix.popup import Popup
from kivy.uix.image import Image
import os
class LoadDialog(FloatLayout):
load = ObjectProperty(None)
cancel = ObjectProperty(None)
class Root(FloatLayout):
loadfile = ObjectProperty(None)
savefile = ObjectProperty(None)
lbl_path = ObjectProperty(None)
img = ObjectProperty(None)
picture_path = ""
def dismiss_popup(self):
self._popup.dismiss()
def show_load(self):
content = LoadDialog(load=self.load, cancel=self.dismiss_popup)
self._popup = Popup(title="Load file", content=content,
size_hint=(0.9, 0.9))
self._popup.open()
def load(self, path, filename):
with open(os.path.join(path, filename[0])) as img:
self.img.source = ''.join(filename)
self.picture_path = self.img.source
self.lbl_path.text = self.picture_path
self.dismiss_popup()
class Editor(App):
pass
Factory.register('Root', cls=Root)
Factory.register('LoadDialog', cls=LoadDialog)
if __name__ == '__main__':
Editor().run()
kivy (editor.kv):
Root:
img: img
lbl_path: lbl_path
canvas.before:
Color:
rgba: 1, 1, 1, 1
Rectangle:
pos: self.pos
size: self.size
BoxLayout:
orientation: 'vertical'
BoxLayout:
size_hint_y: None
height: 30
Button:
text: 'Load'
on_release: root.show_load()
BoxLayout:
padding: 20
GridLayout:
rows: 2
Image:
id: img
size_hint: (.8, .8)
GridLayout:
rows: 3
Label:
id: lbl_path
color: (1, 0, 0, 1)
text: "Picture:"
size_hint: (.8, .8)
<LoadDialog>:
BoxLayout:
size: root.size
pos: root.pos
orientation: "vertical"
FileChooserListView:
id: filechooser
BoxLayout:
size_hint_y: None
height: 30
Button:
text: "Cancel"
on_release: root.cancel()
Button:
text: "Load"
on_release: root.load(filechooser.path, filechooser.selection)
【问题讨论】:
请向我们展示您的一些代码以开始使用 使用 jnius 使用意图 【参考方案1】:如果您想访问 android 手机存储数据(图像、视频等),您需要为此授予权限 您可以分两步完成此操作
将您的权限添加到您的规范文件中的android.permissions
,如下所示:
android.permissions = READ_EXTERNAL_STORAGE ,WRITE_EXTERNAL_STORAGE
在这样的构建方法中从您的代码中请求用户的许可:
def build(self):
if platform == 'android':
from android.permissions import request_permissions, Permission
request_permissions([Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE])
然后您可以使用 kivy filechooser 或 kivymd filemanager 从手机存储中提取资产
【讨论】:
以上是关于从画廊 Python Kivy for Android 中选择图像的主要内容,如果未能解决你的问题,请参考以下文章
在 Kivy for Python 中按下按钮时更新标签的文本
在 Kivy for Python 中按下按钮时更新标签的文本
如何使 APK 在 WINDOWS 上独立于 Kivy 和 python?
kivy.org - Open source Python library for rapid development of applications