Beeware使用python开发安卓应用
briefcase dev 调试
briefcase create android 创建
briefcase build android 构造
可以将第三方的包的镜像链接放进pyproject.toml中的:
requires = [
'https://mirrors.aliyun.com/pypi/packages/02/55/67a3c17b9e7d972ed8c246f104da99ca4f3ea42fba566697e479011b84b6/Pillow-9.2.0-cp310-cp310-win_amd64.whl#sha256=254164c57bab4b459f14c64e93df11eff5ded575192c294a0c49270f22c5d93d','https://mirrors.aliyun.com/pypi/packages/42/87/4a3a77e59ab7493d64da1f69bf1c2e899a4cf81e51b2baa855e8cc8115be/qrcode-6.1-py2.py3-none-any.whl#sha256=3996ee560fc39532910603704c82980ff6d4d5d629f9c3f25f34174ce8606cf5',
]
整体界面的关键是Toga的使用 官方Toga教程
展示图片,定义 图片控件的添加
图片保存的话直接保存到了别的地方,使用下面的代码配合一个个加回来
cur_path = os.path.abspath(os.path.dirname(__file__))
第三方库的使用还是有点问题,通过上面的方法可以编译,但是运行的时候会报错!
所以尽量尝试使用原生的库
import urllib.request as request
url = 'https://tool.oschina.net/action/qrcode/generate?data={}&output=image%2Fjpeg'.format('ij')
image = request.urlretrieve(url, 'image.jpg')
上面这段生成二维码的代码耗时0.6秒,不错了
Toga学习
基本的原理,下面的代码将创建一个带按钮的窗口,点击按钮会在控制台打印hello
# -*- coding: utf-8 -*-
# @Time : 2022/9/26 21:25
# @Author : Lanpangzi
# @File : study.py
# 此教程的网页:https://toga.readthedocs.io/en/latest/tutorial/tutorial-0.htmlimport togadef button_handler(widget):print("hello")def build(app):# Box是一个城防小部件的容器box = toga.Box()button = toga.Button('Hello world', on_press=button_handler)# toga使用的是类似于css的样式设计模式# padding指的是与四周边的距离button.style.padding = 20# flex控制的是与左右控件的关系button.style.flex = 1box.add(button)return boxdef main():# 最终调用的是这个main函数,build函数只是他的一个参数return toga.App('First App', 'org.beeware.helloworld', startup=build)if __name__ == '__main__':main().main_loop()
下面的是创建一个温度转换器
# -*- coding: utf-8 -*-
# @Time : 2022/9/26 22:23
# @Author : Lanpangzi
# @File : study2.py
import toga
from toga.style.pack import COLUMN, LEFT, RIGHT, ROW, Packdef build(app):# box里面可以塞boxc_box = toga.Box()f_box = toga.Box()box = toga.Box()c_input = toga.TextInput(readonly=True)f_input = toga.TextInput()c_label = toga.Label('Celsius', style=Pack(text_align=LEFT))f_label = toga.Label('Fahrenheit', style=Pack(text_align=LEFT))join_label = toga.Label('is equivalent to', style=Pack(text_align=RIGHT))def calculate(widget):try:c_input.value = (float(f_input.value) - 32.0) * 5.0 / 9.0except ValueError:c_input.value = '???'button = toga.Button('Calculate', on_press=calculate)# 可以先把所有的组件都塞进去,然后再update布局f_box.add(f_input)f_box.add(f_label)c_box.add(join_label)c_box.add(c_input)c_box.add(c_label)box.add(f_box)box.add(c_box)box.add(button)# 没有下面的update程序也能正常运行,但是布局就是默认的了box.style.update(direction=COLUMN, padding_top=10)f_box.style.update(direction=ROW, padding=5)c_box.style.update(direction=ROW, padding=5)c_input.style.update(flex=1)f_input.style.update(flex=1, padding_left=160)c_label.style.update(width=100, padding_left=10)f_label.style.update(width=100, padding_left=10)join_label.style.update(width=150, padding_right=10)button.style.update(padding=15, flex=1)return boxdef main():return toga.App('Temperature Converter', 'org.beeware.f_to_c', startup=build)if __name__ == '__main__':main().main_loop()
创建一个自己的浏览器,这玩意需要一个edge的小玩意,不知道安卓能不能运行。。。。
# -*- coding: utf-8 -*-
# @Time : 2022/9/26 23:10
# @Author : Lanpangzi
# @File : 创建浏览器窗口.pyimport toga
from toga.style.pack import CENTER, COLUMN, ROW, Packclass Graze(toga.App):def startup(self):self.main_window = toga.MainWindow(title=self.name)# on_webview_load是当按钮按下时调用的函数,哪来的按钮??应该是网页中的按钮# 先定义所有的组件,然后再组装起来self.webview = toga.WebView(on_webview_load=self.on_webview_loaded, style=Pack(flex=1))self.url_input = toga.TextInput(value='https://beeware.org/',style=Pack(flex=1))self.button = toga.Button('Go', on_press=self.load_page, style=Pack(width=50, padding_left=5))self.up_box = toga.Box()self.up_box.add(self.url_input, self.button)self.main_box = toga.Box(style=Pack(direction=COLUMN))self.main_box.add(self.up_box, self.webview)self.main_window.content = self.main_boxself.webview.url = self.url_input.value# Show the main windowself.main_window.show()def load_page(self, widget):self.webview.url = self.url_input.valuedef on_webview_loaded(self, widget):self.url_input.value = self.webview.urldef main():return Graze('Graze', 'org.beeware.graze')if __name__ == '__main__':main().main_loop()
返校码制作方案2,直接爬取并保存图片,这个方案的二维码没有颜色
# -*- coding: utf-8 -*-
# @Time : 2022/9/26 23:39
# @Author : Lanpangzi
# @File : 爬取并显示图片.py# -*- coding: utf-8 -*-
# @Time : 2022/9/26 23:39
# @Author : Lanpangzi
# @File : 爬取并显示图片.pyimport urllib.request as request
import urllib.parse as parse
import toga
from toga.style.pack import CENTER, COLUMN, ROW, Pack
import os
import timeclass ShowImage(toga.App):def startup(self):self.image_id = 0self.user_id = 0self.main_window = toga.MainWindow(title=self.name)# 先定义所有的组件,然后再组装起来self.id_input = toga.TextInput(value='请复制微信扫描返校码后生成的文字并粘贴到此处',# value='sa_sas_a',style=Pack(flex=1))self.button = toga.Button('生成返校码', on_press=self.get_image, style=Pack(flex=1))self.up_box = toga.Box(style=Pack(direction=COLUMN))self.up_box.add(self.id_input, self.button)self.main_box = toga.Box(style=Pack(direction=COLUMN))self.image_window = toga.ImageView(toga.Image(path='1.png'))self.main_box.add(self.up_box, self.image_window)self.main_window.content = self.main_box# Show the main windowself.main_window.show()def get_image(self, widget):time_stamp = self.get_time_stamp()if self.user_id == 0:self.user_id = self.id_input.value.split('_')[0] + '_' + self.id_input.value.split('_')[1]id = parse.quote(self.user_id + '_' + time_stamp)print(id)start_time = time.perf_counter()cur_path = os.path.abspath(os.path.dirname(__file__))url = 'https://tool.oschina.net/action/qrcode/generate?data={}&output=image%2Fjpeg'.format(id)path_a_name = os.path.join(cur_path, 'image_{}.jpg'.format(self.image_id))request.urlretrieve(url, path_a_name)end_time = time.perf_counter()print('图片已生成,耗时:{}'.format(end_time - start_time))self.change_window()def change_window(self):# self.main_window = toga.MainWindow(title=self.name)self.top_image = toga.ImageView(toga.Image(path='top_img.png'),style=Pack(height=200, flex=1))self.top_box = toga.Box(style=Pack(flex=1))self.top_box.add(self.top_image)self.button = toga.Button('刷新校园码', on_press=self.get_image,style=Pack(width=105, padding_top=10, color="#16c010"))# self.up_box = toga.Box(style=Pack(flex=1))# self.up_box.add(self.button)cur_path = os.path.abspath(os.path.dirname(__file__))path_a_name = os.path.join(cur_path, 'image_{}.jpg'.format(self.image_id))self.image_id += 1self.image_window = toga.ImageView(toga.Image(path=path_a_name), style=Pack(height=200, color='#16c010'))self.image_box = toga.Box(style=Pack(alignment='center', direction=COLUMN))self.image_box.add(self.image_window, self.button)self.main_box = toga.Box(style=Pack(direction=COLUMN))self.main_box.add(self.top_box, self.image_box)self.main_window.content = self.main_box# self.main_window.show()def get_time_stamp(self):return str(time.time())[:10]def main():return ShowImage('返校码快速打开', 'org.beeware.graze')if __name__ == '__main__':main().main_loop()
不能挂着梯子使用,会非常慢!!
要想所有的元素都居中排布,需要设置main_box
self.main_box = toga.Box(style=Pack(direction=COLUMN, alignment=CENTER))
使用页面内浏览器实现带颜色的二维码,但是比例还是有点问题无法调整
# -*- coding: utf-8 -*-
# @Time : 2022/9/26 23:39
# @Author : Lanpangzi
# @File : 爬取并显示图片.pyimport toga
from toga.style.pack import CENTER, COLUMN, Pack
import time
import osclass ShowImage(toga.App):def startup(self):self.user_id = 0self.main_window = toga.MainWindow(title=self.name)self.cur_path = os.path.abspath(os.path.dirname(__file__))input_value = '请复制微信扫描返校码后生成的文字并粘贴到此处'if os.path.exists(os.path.join(self.cur_path, 'user_id.txt')):with open(os.path.join(self.cur_path, 'user_id.txt'), 'r') as fp:input_value = fp.readline()self.id_input = toga.TextInput(value=input_value,style=Pack(flex=1))self.button = toga.Button('生成返校码', on_press=self.get_image, style=Pack(flex=1))self.main_box = toga.Box(style=Pack(direction=COLUMN))self.main_box.add(self.id_input, self.button)self.main_window.content = self.main_boxself.main_window.show()def get_image(self, widget):self.top_image = toga.ImageView(toga.Image(path='top_img.png'),style=Pack(height=200, flex=1))self.button = toga.Button('刷新校园码', on_press=self.change_window,style=Pack(width=105, padding_top=10, color="#16c010"))self.webview = toga.WebView(style=Pack(width=250, height=250, padding_top=20))self.change_window(widget=widget)self.webbox = toga.Box(style=Pack(direction=COLUMN))self.webbox.add(self.webview)self.main_box = toga.Box(style=Pack(direction=COLUMN, alignment=CENTER))self.main_box.add(self.top_image, self.webbox, self.button)self.main_window.content = self.main_boxself.main_window.show()def change_window(self, widget):if self.user_id == 0:self.user_id = self.id_input.value.split('_')[0] + '_' + self.id_input.value.split('_')[1]id = self.user_id + '_' + self.get_time_stamp()with open(os.path.join(self.cur_path, 'user_id.txt'), 'w') as fp:fp.write(id)self.webview.url = 'https://tool.lu/qrcode/basic.html?text={}&tolerance=15&size=250&margin=0&front_color=%2327a844&background_color=%23ffffff'.format(id)def get_time_stamp(self):return str(time.time())[:10]def main():return ShowImage('返校码快速打开', 'org.beeware.graze')if __name__ == '__main__':main().main_loop()
Beeware使用python开发安卓应用相关推荐
- python写安卓游戏_python写lol游戏脚本(用python开发安卓脚本)
python写lol游戏脚本 俾格米人和搅拌机的引擎. python-ogre和panda3d是用c/c编写的,但只提供了一个python接口. 你好,蟒蛇可以在Android上工作. 因为你可以在A ...
- python开发安卓程序-如何使用python开发android应用
Python是一种面向对象.解释型计算机程序设计语言,其源代码和解释器CPython遵循GPL(GNU General Public License)协议Python语法简洁清晰,特色之一是强制用空白 ...
- python开发安卓程序-如何使用python开发Android手机应用?
在使用python开发android应用之前我们需要准备好环境,环境需要安装PythonForAndroid,然后开始编程,编程时打开eclipse, 创建一个新的android project &q ...
- python开发安卓程序-用python开发android应用(1)
Python是动态语言,比较简洁.Android不直接支持使用python开发应用,需要使用其它中间件或者库.PythonForAndroid提供了在android平台上对python语言的支持:CL ...
- python开发安卓程序-python可以编写android程序吗?
python可以编写android程序吗?答案是肯定的.Android不直接支持使用python开发应用,需要使用其它中间件或者库.PythonForAndroid.CLE以及Wrapandroid ...
- python怎么开发安卓程序_怎样用python开发安卓app-到底如何使用Python开发Android程序.txt...
Python是一种动态语言,是比较简单的. Android不直接支持使用Python开发的应用程序,它需要使用它的中间件或数据库.它提供了在Android平台上的Python语言的支持; Python ...
- python 开发安卓应用商店_用Python爬取各Android市场应用下载量(3分钟学会)
就是这么简单! 文章目录 前言 设计一个函数 构造要爬取的网址 确定要爬取的内容的位置 构建输入和调用部分 程序完整代码 0 前言 有时候,总有一些重复又琐碎的工作,却不得不做-- 一个个统计,也不是 ...
- python开发安卓盒子_Python盒子:模块、包和程序
命令行参数: import sys print('Program arguments:',sys.argv) 关于choice: from random import choice possibili ...
- python 开发安卓 获取wifi_用python获取可用wifi信息(windows版)
点击电脑的网络设置,总能看到附近可用的wifi,那么能否用python写程序获取这些可用wifi网络信息呢? 某些人看到这里已经开始质疑做这件事情的意义了,觉得这样的技术在工作中永远不会使用,不值得学 ...
最新文章
- RDKit:计算不同分子或构象之间的RMSD
- 一个简单的内核模块实现和使用
- 安检x光机原理计算机实现,安检x光机成像原理介绍
- 关于事件的一点小总结
- CSS的outline轮廓属性:轮廓属性
- C# 获取文件名及扩展名
- .NET Core 3.0 本地工具
- java导出excel文件名_怎么解决java导出excel时文件名乱码
- kb4023057安装失败_微软重发Win10 KB4023057 补丁,推动Win10更新
- js简单判断身份证合法性以及身份证生日合法性
- 03 Java基本语句结构
- 基于java的电子政务网的设计及开发
- java基本数据类型存放在哪?
- 从零开始了解 kubernetes,还有谁不会?
- 大数据网站汇总(数据搜集、大数据竞赛、)
- 【托业】【新托业TOEIC新题型真题】学习笔记9-题库七+八--P4-5
- [导入]polygraph3d三维运行时引擎为silverlight 1.0.zip(15.69 KB)
- GitHub怎么搜索项目
- 时空知识图谱应用初探
- 笔记本显示器亮度调节脚本