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开发安卓应用相关推荐

  1. python写安卓游戏_python写lol游戏脚本(用python开发安卓脚本)

    python写lol游戏脚本 俾格米人和搅拌机的引擎. python-ogre和panda3d是用c/c编写的,但只提供了一个python接口. 你好,蟒蛇可以在Android上工作. 因为你可以在A ...

  2. python开发安卓程序-如何使用python开发android应用

    Python是一种面向对象.解释型计算机程序设计语言,其源代码和解释器CPython遵循GPL(GNU General Public License)协议Python语法简洁清晰,特色之一是强制用空白 ...

  3. python开发安卓程序-如何使用python开发Android手机应用?

    在使用python开发android应用之前我们需要准备好环境,环境需要安装PythonForAndroid,然后开始编程,编程时打开eclipse, 创建一个新的android project &q ...

  4. python开发安卓程序-用python开发android应用(1)

    Python是动态语言,比较简洁.Android不直接支持使用python开发应用,需要使用其它中间件或者库.PythonForAndroid提供了在android平台上对python语言的支持:CL ...

  5. python开发安卓程序-python可以编写android程序吗?

    python可以编写android程序吗?答案是肯定的.Android不直接支持使用python开发应用,需要使用其它中间件或者库.PythonForAndroid.CLE以及Wrapandroid ...

  6. python怎么开发安卓程序_怎样用python开发安卓app-到底如何使用Python开发Android程序.txt...

    Python是一种动态语言,是比较简单的. Android不直接支持使用Python开发的应用程序,它需要使用它的中间件或数据库.它提供了在Android平台上的Python语言的支持; Python ...

  7. python 开发安卓应用商店_用Python爬取各Android市场应用下载量(3分钟学会)

    就是这么简单! 文章目录 前言 设计一个函数 构造要爬取的网址 确定要爬取的内容的位置 构建输入和调用部分 程序完整代码 0 前言 有时候,总有一些重复又琐碎的工作,却不得不做-- 一个个统计,也不是 ...

  8. python开发安卓盒子_Python盒子:模块、包和程序

    命令行参数: import sys print('Program arguments:',sys.argv) 关于choice: from random import choice possibili ...

  9. python 开发安卓 获取wifi_用python获取可用wifi信息(windows版)

    点击电脑的网络设置,总能看到附近可用的wifi,那么能否用python写程序获取这些可用wifi网络信息呢? 某些人看到这里已经开始质疑做这件事情的意义了,觉得这样的技术在工作中永远不会使用,不值得学 ...

最新文章

  1. RDKit:计算不同分子或构象之间的RMSD
  2. 一个简单的内核模块实现和使用
  3. 安检x光机原理计算机实现,安检x光机成像原理介绍
  4. 关于事件的一点小总结
  5. CSS的outline轮廓属性:轮廓属性
  6. C# 获取文件名及扩展名
  7. .NET Core 3.0 本地工具
  8. java导出excel文件名_怎么解决java导出excel时文件名乱码
  9. kb4023057安装失败_微软重发Win10 KB4023057 补丁,推动Win10更新
  10. js简单判断身份证合法性以及身份证生日合法性
  11. 03 Java基本语句结构
  12. 基于java的电子政务网的设计及开发
  13. java基本数据类型存放在哪?
  14. 从零开始了解 kubernetes,还有谁不会?
  15. 大数据网站汇总(数据搜集、大数据竞赛、)
  16. 【托业】【新托业TOEIC新题型真题】学习笔记9-题库七+八--P4-5
  17. [导入]polygraph3d三维运行时引擎为silverlight 1.0.zip(15.69 KB)
  18. GitHub怎么搜索项目
  19. 时空知识图谱应用初探
  20. 笔记本显示器亮度调节脚本

热门文章

  1. MySQL 单表亿级数据查询优化,达到秒级响应
  2. 如何快速把某文件夹内所有文件的文件名自定义重命名?
  3. 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(三)商业逻辑代码部分
  4. UI设计课EDC研究所1期 Part 10 - 数字的字体
  5. Vue3.0中emit的使用
  6. 如何高效阅读一本书?4个方法让你获得10倍效!
  7. 诺贝尔化学奖:酶分子“定向进化”
  8. 微信退款异步通知获得的req_infoAES加密和解密方法以及常见的问题
  9. 适合0基础学习Python的路线图
  10. 亲测有效的下载微信公众号推文视频的一种方法。