Android QPython3 可视化-文件(夹)选择:ListFile.py
#需要BaseWindow.py https://www.bilibili.com/read/cv8680125
from BaseWindow import *
from os import listdir
from os.path import isdir
XML="""<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#3faf7f"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_weight="20">
<TextView
android:id="@+id/Title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="9dp"
android:text="%s"
android:textColor="#ffffff"
android:textStyle="bold"
android:layout_weight="1"
android:gravity="center"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="6dp"
android:text="当前文件夹路径:%s"
android:textColor="#ffffff"
android:layout_weight="1"/>
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="20"
/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="160dp"
android:orientation="vertical"
android:layout_weight="10">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:layout_weight="8">
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:textSize="6dp"
android:text="文件名"
android:textColor="#ffffff"
android:background="#af3f3f"
android:layout_weight="1"
/>
<EditText
android:id="@+id/FileName"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="6dp"
android:text="%s"
android:textColor="#0000ff"
android:layout_weight="4"
/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:layout_weight="8">
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="确认"
android:id="@+id/but_conf"
android:textSize="6dp"
android:background="#3f7faf"
android:textColor="#ffffff"
android:layout_weight="1"
android:gravity="center"/>
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="向上"
android:id="@+id/but_uppt"
android:textSize="6dp"
android:background="#6f1f00"
android:textColor="#ffffff"
android:layout_weight="1"
android:gravity="center"/>
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="初始"
android:id="@+id/but_strt"
android:textSize="6dp"
android:background="#2f005f"
android:textColor="#ffffff"
android:layout_weight="1"
android:gravity="center"/>
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="取消"
android:id="@+id/but_canc"
android:textSize="6dp"
android:background="#4f3f00"
android:textColor="#ffffff"
android:layout_weight="1"
android:gravity="center"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>"""
class MainScreen(Layout):
def on_show(self):
v=self.views
v.listview.set_listitems(self.List)
v.listview.add_event(itemclick_EventHandler(v.listview,self.clck))
v.but_conf.add_event(click_EventHandler(v.but_conf,self.conf))
v.but_canc.add_event(click_EventHandler(v.but_canc,self.canc))
v.but_uppt.add_event(click_EventHandler(v.but_uppt,self.uppt))
v.but_strt.add_event(click_EventHandler(v.but_strt,self.strt))
def on_close(self):
pass
def clck(self,view,dummy):
x=int(dummy['data']['position'])
if x<self.DirCount:
d=self.Dir[x]
MainScreen.Path=(d,self.views.FileName.text)
else:
d=self.File[x-self.DirCount]
x=d.rfind('/')
if x>=0:
d=d[x+1:]
MainScreen.Path=(MainScreen.Path,d)
FullScreenWrapper2App.close_layout()
def conf(self,view,dummy):
MainScreen.Path=self.Path+self.views.FileName.text
FullScreenWrapper2App.close_layout()
def uppt(self,view,dummy):
MainScreen.Path=(PathUp(self.Path),self.views.FileName.text)
FullScreenWrapper2App.close_layout()
def canc(self,view,dummy):
MainScreen.Path=None
FullScreenWrapper2App.close_layout()
def strt(self,view,dummy):
MainScreen.Path=(MainScreen.sPath,self.views.FileName.text)
FullScreenWrapper2App.close_layout()
def ListFile(Title='选择一个文件(夹)',Path='/sdcard',FileName=''):#主函数
#文件(夹)选择器(标题,初始路径,初始文件名)
#按条形菜单项:进入对应路径,或选择对应文件
#按“确认”:返回文件(夹)路径
#按“取消”:返回None
#按“向上”:进入上级路径
#按“初始”:重回Path路径
MainScreen.sPath=d=MainScreen.Path=PathStrip(Path)
while True:
try:
l=listdir(d)
except:
l=[]
MainScreen.Dir=D=[]
MainScreen.File=F=[]
l.sort()
for i in l:
j=d+i
if isdir(j):
D.append(j+'/')
else:
F.append(j)
MainScreen.List=b=[]
for i in D:
b.append(i.rsplit('/',2)[-2]+':目录')
for i in F:
b.append(i.rsplit('/',1)[-1]+':文件')
MainScreen.Count=len(b)
MainScreen.DirCount=len(D)
r=XML%(Str2Xml(Title),Str2Xml(d),Str2Xml(FileName))
FullScreenWrapper2App.show_layout(MainScreen(r,'File'))
FullScreenWrapper2App.eventloop()
d=MainScreen.Path
if d==None:
return
elif type(d)!=tuple:
return d
d,FileName=d
MainScreen.Path=d
def PathUp(x):
y=x.rfind('/',0,-1)
return x[:y+1]
def PathStrip(Path):
Path=Path.strip()
if Path=='' or Path[-1]!='/':
Path+='/'
return Path
__all__=('ListFile','droid')
==========说明==========

按“确认”返回:'/sdcard/qpython/xx.py'
视频:https://www.bilibili.com/BV1Pz4y1C7ds
作者:乘着船@Bilibili
更多文章+下载链接:https://www.bilibili.com/read/readlist/rl321663