赞
踩
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秒,不错了
基本的原理,下面的代码将创建一个带按钮的窗口,点击按钮会在控制台打印hello
# -*- coding: utf-8 -*- # @Time : 2022/9/26 21:25 # @Author : Lanpangzi # @File : study.py # 此教程的网页:https://toga.readthedocs.io/en/latest/tutorial/tutorial-0.html import toga def 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 = 1 box.add(button) return box def 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, Pack def build(app): # box里面可以塞box c_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.0 except 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 box def 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 : 创建浏览器窗口.py import toga from toga.style.pack import CENTER, COLUMN, ROW, Pack class 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_box self.webview.url = self.url_input.value # Show the main window self.main_window.show() def load_page(self, widget): self.webview.url = self.url_input.value def on_webview_loaded(self, widget): self.url_input.value = self.webview.url def 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 : 爬取并显示图片.py import urllib.request as request import urllib.parse as parse import toga from toga.style.pack import CENTER, COLUMN, ROW, Pack import os import time class ShowImage(toga.App): def startup(self): self.image_id = 0 self.user_id = 0 self.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 window self.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 += 1 self.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 : 爬取并显示图片.py import toga from toga.style.pack import CENTER, COLUMN, Pack import time import os class ShowImage(toga.App): def startup(self): self.user_id = 0 self.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_box self.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_box self.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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。