欢迎光临散文网 会员登陆 & 注册

Android QPython3 可视化-文件(夹)选择:ListFile.py

2020-12-07 17:00 作者:乘着船  | 我要投稿

#需要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')


==========说明==========


ListFile('标题','/sdcard/qpython')

按“确认”返回:'/sdcard/qpython/xx.py'


视频:https://www.bilibili.com/BV1Pz4y1C7ds

作者:乘着船@Bilibili

更多文章+下载链接:https://www.bilibili.com/read/readlist/rl321663




Android QPython3 可视化-文件(夹)选择:ListFile.py的评论 (共 条)

分享到微博请遵守国家法律