- 博客(70)
- 资源 (7)
- 收藏
- 关注

原创 TKinter在子线程更新进度条UI
一、背景要用 python 做一个小工具,需要在子线程任务中更新界面,例如更新进度条,如果用 Pyqt5,Pyside2 等,可以通过在 QThread 里用pyqtSignal 来发射信号更新 UI,但是由于这俩框架做出来的程序打包成 .exe 后,包体积实在太大,这小工具界面又未复杂到非要使用 Pyqt5 的地步,以包体积换方便用户就不方便了,就选择使用 Tkinter 来实现好了。最终效果:二、问题分析问题一:TKinter 里原生控件太少,连进度条控件也没有找着,只能自己画一个了;问题二
2021-03-04 15:43:23
3002
5

原创 android一种不规则布局的实现方式
一.背景正准备出去抽根烟的你突然被产品经理叫住了,“快来,快来,我告诉你一个好消息,前几天我不是说要给 app 的菜单入口这一截 UI 美化一下嘛,我昨天突发灵感,已经想好了一个很有特色的样式,这下我们的 UI 一定和别人的不一样,我们要让产品富有品牌表现力”。这看起来是挺有特别的,不过感觉有违 android UI 排列常理呀,形状倒是没什么问题,关键是这无缝衔接就有点奇怪了,这形状最简单...
2019-06-29 15:07:49
3500
9

原创 网页监听返回键
如果项目希望和运行在设备自带浏览器里一样的返回交互,使用第一种方案;网页无需做任何处理,app端监听按键来处理返回键。如果项目以网页端逻辑为主,apk只是当作一个加载网页的容器,希望在网页里完全控制返回键,使用第二种方案;网页来控制返回键,app端要通过js通知网页端,并提供退出页面的方法。如果希望在网页里根据接口数据动态决定由网页还是native控制返回键,使用第三种方案。
2018-07-24 09:26:57
4995
1
原创 修改modelscope 和 huggingface_hub 库默认模型下载存储路径
modelscope和库下载的模型默认是存在C盘下的.cache目录(windows),下面是修改默认模型下载路径的方法
2025-04-10 20:43:55
363
原创 java.io.IOException: Invalid keystore format 签名异常
Failed to load signer "signer #1"java.io.IOException: Invalid keyst在 android studio 里通过 build-Generate Signed Bundle or APK 页面创建了一个签名文件,然后这个签名文件在 android studio 里使用能正常签名,但通过命令行签名时报了上面异常,签名失败。
2024-05-21 20:30:00
1124
原创 Type inference failed: Not enough information to infer parameter T in fun <T: View!> findViewById(id
Type inference failed: Not enough information to infer parameter T in fun findViewById(id: Int): T!
2023-12-25 20:30:00
465
原创 org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ‘:app‘.
Incremental java compilation is an incubating feature.FAILURE: Build failed with an exception.What went wrong:A problem occurred configuring project ‘:app’.> java.lang.NullPointerException (no error message)Try:Run with --info or --debug option to get m
2023-12-25 20:15:00
1859
原创 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{25e06b25 position=11 id=-1, oldPos=-1, pLpos:-1 no parent}
2023-12-25 20:00:00
164
原创 kotlin dialog 异常全屏显示
关键在第 5 行,这里带?是有区别的,因为声明的 dialog 是可空的,这里因为已经在上面判空了,所以第 5 不写 dialog?不会报错,但是这样写布局会变成全屏的;要写成 dialog?.apply{} 才会符合预期。
2023-03-03 19:30:00
337
原创 vue正式环境和测试环境切换
目的:根据不同的启动命令应用对应环境的域名及其它变量值创建配置文件:在项目根目录下创建这四个文件,作用及含义分别为:.env:公用配置文件,不管在哪个环境启动的项目,都会使用这个文件里面的变量,下面三个文件里和此文件同名的变量会覆盖.env里的变量,不同名就合并,也就是说.env里的同名变量优先级更低;.env.development:开发环境,默认不指定任何环境启动时就使用这个文件里的变量;.env.staging:测试环境,在 package.json 启动命令后加 --mode stag
2022-05-18 21:00:00
6896
原创 apk v1+v2命令行签名命令
v1签名方式jarsigner -v -keystore [a] -signedjar [b] [c] [d]-verbose:输出详细信息[a]:签名文件路径[b]:签名后的apk文件名[c]:待签名的apk文件名[d]:签名文件的别名例如:jarsigner -verbose -keystore my.jks -signedjar signed_v1.apk unsign.apk myalias执行命令,会提示输入密码,输入签名文件密码。v1+v2签名方式java -jar a
2022-05-07 16:56:57
4522
原创 计算机等级算法
[问题描述]求最大整数n及下列不等式左边的值,使得1+(1+2)+(1+2+3+…+(1+2+3+… +n)≤m ( m为小于32768的正整数)[输入]一个正整数 m[输出]共一行,输出两个数。n的值及1+(1+2)+(+2+3+…+(+2+3+…+n)的值# 递归def func1t(n): if n <= 1: return 1 return n + func1t(n - 1)def func1(m): n = 0 n_res
2022-03-27 13:03:51
534
原创 centos上安装android打包环境
一、安装 java 环境** 1.1下载 liunx 版本的 jdk **地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html** 1.2拷贝到 linux 上并解压到应用程序目录**scp D:\jdk-8u311-linux-x64.tar.gz test@ip:jdk-8u311-linux-x64.tar.gz解压tar -zxvf jdk-8u311-linux-x
2021-11-08 20:00:00
1009
原创 Appium使用
1.安装pip install Appium-Python-Client2.基本使用import timefrom appium import webdriverdesired_caps = dict()desired_caps['platformName'] = 'Android' # 大小写无所谓,但是不能乱写desired_caps['platformVersion'] = '5.1.1' # 不能写错desired_caps['deviceName'] = 'Android
2021-10-15 11:16:00
409
原创 android 广播自定义权限
一、广播接收者定义的权限你的应用定义了一个广播接收者,你不希望谁都能在自己的应用里发送这个广播让你接收到,所以你打算定义一个权限来控制一下。1.在 AndroidManifest.xml 文件里声明一个新的权限<permission android:name="com.xxx.xxx.permission" />2.在声明的广播上加上这个权限 <receiver android:name=".broadcast.MyBroadcast" an
2021-09-09 16:58:58
4401
原创 ES6的导入和导出
一.导入和导出1.加 default 是导出一个对象,不能用大括号直接解包。libs/http.jsfunction axiosPost(options) {}function axiosGet(options) {}export default{ axiosGet, axiosPost}使用时要这样写:import obj from '@/libs/http'obj.axiosGet()2.不加 default 是导出一个数组,要用大括号解包export {
2021-08-24 11:31:10
715
原创 flex布局最后一行元素左对齐
需求:元素高度不固定,总数不固定,一行 6 个元素方案一(×): 使用justify-content: space-between;自动设置列间距的情况<template> <div class="ft"> <div class="div-flex"> <div class="item" v-for="i in 5" :key="i"></div> </div> </div><
2021-08-11 14:21:32
1455
3
原创 pandas时间序列
1.datetime 模块操作时间 strptime = datetime.strptime('2020-01-01', '%Y-%m-%d') print(strptime, type(strptime)) # 2020-01-01 00:00:00 <class 'datetime.datetime'>如果时间变成了 2020/01/01,这时后面的格式得手动改成 %Y/%m/%d2.dateutil 操作时间 parse = dateutil.parser.p
2021-06-15 10:12:06
1384
原创 ref,toRefs,reactive的用法
ref 的用法:<template> <div> <div @click="name='李四'">{{name}}</div> <div @click="age=21">{{age}}</div> </div></template><script>import { ref } from 'vue';export default { na
2021-06-01 20:11:17
242
原创 python 闭包
1.何为闭包?def func(x): def func1(y): print(x+y) return func1f = func(1)f(2)函数里面再定义一个函数的,里面这个函数会乃至外层函数传入进来的参数,那么把这个函数及用到的外层函数的参数这个整体称为闭包。2.和普通函数有何区别?为什么要用闭包?普通函数和lambda函数只能传递函数功能,不能传递可以保存到一个小空间的数据;例如你要计算 ax+b 的值用普通函数是这样写def func(x, a
2021-05-25 10:53:47
204
原创 vertical-align属性的用法
vertical-align属性baseline(默认值) :把行内级盒子的基线与父盒的基线对齐,如果没有基线, margin bottom边缘与父盒基线对齐;sub :把行内级盒子的基线降到父盒下标的适当位置;super :把行内级盒子的基线升到父盒上标的适当位置;<percentage> :把行内级盒子提升或者下降段距离 (距离相对于line height计算),0%意味着同baseline一样;<length> :把行内级盒子提升或者下降一段距离 , 0cm意味着同b
2021-05-25 10:35:35
6733
原创 网页不同分辨率适配
简介你大声的嚷着你的手机分辨率就是1920*1080的,这是你攒了足足两个月的钱后在小米官网买的红米手机,绝不可能有假。你写了一个宽为 960px 的 div,用手机的浏览器横屏打开后,你期望这个该死的 div 会和在电脑上的浏览器加载出来一样的效果,只占屏幕的一半。结果却让你纳了血闷,明明电脑上分辨率和手机分辨率都是1920*1080,为何电脑上 960px 正好占一半,手机上却占了一大半,几乎占满了你手机的整个屏幕的宽。然后你去问了前端大神这是怎么回事,大神欲言又止,看起来并不太想仔细的给你解释,
2020-11-17 16:35:33
7757
原创 Rxjava1和2在网络封装时的一些区别
1.TransFormer的区别在使用 Retrofit 和 Rxjava 处理网络流程时,一般会统一处理结果BaseModel.javapublic class BaseModel<T> { public String code; public String message; public T result; public boolean su...
2019-11-06 11:03:11
435
原创 ItemDecoration实现等分间距
一.背景远古时代,GridView 和 ListView 可以直接使用其自带的 api 设置 item 之间的分割线,通过修改分割线的粗细和颜色等可以轻松实现分割线和间距类的效果,还有的直接通过在 item 的布局里设置 margin 或 padding 来实现,后来有了 RecyclerVIew,但是却没提供设置分割线的 api,不过提供了一个功能丰富的 ItemDecoration 类,这个...
2019-10-25 15:37:19
2720
原创 记一次卡顿优化
1.背景这是一个视频通话的项目,就类似于微信视频通话,但是和微信等其它一些视频通话 app 的逻辑有一些不一样的逻辑,例如微信拨打别人时会直接进入视频页面,根据设备的性能(如果性能不好,可能会慢吞吞的打开摄像头预览)来打开己方画面,这时就算慢一点打开预览,用户也不会关心的,为什么呢?因为还没接通嘛,谁会关心自己的画面有没有出来呢,然后等到对方接听后,再直接显示对方画面,这样就无缝衔接上了,很正常...
2019-10-23 14:32:33
580
原创 RecyclerView系列之侧滑删除和拖拽排序
一、背景前面已经实现了 RecyclerView 的上拉加载更多,增加 header,自定义滑动菜单,基本能满足大部分场景的样式了,就算不满足也能通过直接改部分代码轻松实现新的样式;不过这一次产品玩别的 app 时发现了一个新的交互方式,某些列表不需要复杂的操作,只需要删除操作,那么如果用那种滑动菜单的交互方式,用户就得先把菜单滑出来,再点删除按钮才能删掉,这样一来用户就多操作了一步,不如直接让...
2019-06-29 15:07:24
988
原创 RecyclerView系列之滑动菜单
一、背景前面已经实现了 RecyclerView 的下拉刷新和上拉加载更多,给 RecyclerView 添加 header,这两个用的比较多,这次实现的是滑动菜单,实现这个是因为产品经理通常会告诉你,我们要做一个和某某应用一样的效果。有人就说了:“这产品总是模仿,总是让做和别人一样的效果(小声嘀咕:关键这还真不那么容易实现)”。这就不能忍,那还有让你更不能忍的,产品告诉你做一个跟 QQ 的滑动...
2019-06-29 15:06:49
1840
1
原创 RecyclerView系列之增加header
一、背景在RecyclerView还没出来时,列表布局基本都是用 ListView,app 中一般都会有这种设计,上面一个 banner 轮播图,下面一个列表,特别是一些电商类,新闻类 app。下面是最终效果:向上滑动列表时,上面的轮播图就会被滑上去,显然是一体的,用 ListView 时,可以把上面的轮播图控件作为一个 HeaderView 加到 ListView 中,爽的是 ListV...
2019-06-29 15:05:52
2257
原创 RecyclerView系列之加载更多
一、背景很久很久以前简单封装过一次RecyclerView,后来一直开发TV端,列表的需求花样不是很多,主要是解决TV端各种兼容问题,也没怎么琢磨这个美丽的控件了,现在打算重新整理一下,其实网上已经有很多优秀的开源项目了,涵盖功能多,但是就因为功能太多,用起来反而有一些不方便的地方,例如用在TV上或者别的什么地方,有的地方得根据需求和兼容问题作出修改,这样改起来就麻烦了,看的头皮发麻呀,而且很多...
2019-06-29 14:49:02
4769
4
原创 python虚拟环境
1.为什么要使用虚拟环境 使用python开发时免不了要使用一些三方框架,例如要使用Django时,可以直接通过命令来安装pip install django==1.8.0这时自己的项目是使用1.8.0版本的Django,运行没有任何问题,但是如果别的项目使用的是1.9.0版本的Django,在这个环境下可能就跑不起来了,这时如果直接把本地的Django更新到1.9.0,这个项目倒是可...
2018-07-24 09:26:32
3823
原创 18.异步IO
一.协程 1.1简介 协程(Coroutine)又称微线程,程序中的函数,又称为子程序,在所有语言中都是层级调用,例如在A函数中调用了B,在B的执行过程中调用了C,C执行结束返回结果到B,B得到结果继续执行到结束返回结果到A,A拿到B返回的结果继续执行到结束,子程序的调用是通过栈实现的,子程序是一个入口,一次返回,顺序调用;而协程模式在执行过程中可以中断一个子程序去执行另一个子程序,在适当的时...
2018-07-24 09:26:16
3739
原创 17.Web
一.WSGL 1.1.WSGL接口的实现 用Python 开发web服务端需要用到WSGL接口,WSGL接口定义很简单,只要求web开发者实现一个函数,就可以响应HTTP请求了。 一个最简单的web项目:#t17_1.pydef application(environ, start_response): start_response('200 OK', [('Content-T...
2018-07-24 09:25:53
3855
原创 16.数据库
1.SQLiteimport sqlite3dbName = 'test.db'def createTab(): connect = sqlite3.connect(dbName) cursor = connect.cursor() cursor.execute( 'CREATE TABLE IF NOT EXISTS student (id ...
2018-07-24 09:25:39
3926
原创 15.网络编程
1.TCP server:import socketimport threadingimport timedef tcplink(sock, addr): print('Accept new connecting from %s:%s' % addr) sock.send(b'Welcome!') while True: data = so...
2018-07-24 09:25:22
3807
原创 14.GUI
1.Python支持的图形库 Python支持图形化界面的三方库: Tk , wxWidgets , Qt , GTK 其自带的库是支持Tk的Tkinter。2.调用逻辑 Python代码调用内置的Tkinter,Tkinter封装了访问Tk的接口,Tk是一个用Tcl语言开发的支持多个操作系统的图形库;Tk会调用操作系统提供的本地GUI接口,完成最终的GUI。3.示例 fro...
2018-07-24 09:24:56
3683
原创 13.三方模块
PIL requests chardet psutil1.PIL PIL模块提供了操作图像的强大功能 画一个验证码图片:import randomfrom PIL import Image, ImageFont, ImageDraw, ImageFilterdef getChar(): return chr(random.randint(65...
2018-07-24 09:24:10
3743
原创 12.常用模块
datetime collections:namedtuple,deque,defaultdict,OrderedDict,Counter base64 hashlib,md5 itertools:无限迭代器,takewhile,cycle,repeat,分组 contextlib urllib XML:sax,dom1.datetime 当...
2018-07-23 16:23:52
3704
原创 11.正则表达式
1.常用 \d:数字 \w:字母或数字 \s:空格或tab .:任意字符 [0-9a-zA-z_]:0到9或小写字母或大写字母或下划线 A|B:A或B(例如(P|p)ython匹配’Python’或’python’) \:转译字符 *:0个或多个 +:1个或多个 ?:0个或1个 {n}:正好N个 {n,m}:n至m个^:行的开头,^\d表示必须以数字开头 :行的结...
2018-07-23 16:23:03
3786
android TV端加载h5处理返回键的测试apk
2024-03-04
EthernetManager需要用到的android源码jar包
2018-05-10
HttpClient-4.1.1.jar包
2016-05-24
android点击查看大图,ViewPager实现左右滑动切换、缩放图片
2016-02-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人