|
@@ -0,0 +1,109 @@
|
|
|
+#!/usr/bin/python3
|
|
|
+''' a widget that shows only a dir listing
|
|
|
+ '''
|
|
|
+
|
|
|
+import sys,os,argparse
|
|
|
+from tkinter import *
|
|
|
+
|
|
|
+class DirWidget(Listbox):
|
|
|
+ ''' a simple widget that shows a list of directories, staring
|
|
|
+ at the directory passed into the constructor
|
|
|
+
|
|
|
+ a mouse click or 'enter' key will send a 'selected' signal to
|
|
|
+ anyone who connects to this.
|
|
|
+
|
|
|
+ the .. parent directory is shown for all dirs except /
|
|
|
+
|
|
|
+ the most interesting parts of the interface are:
|
|
|
+ constructor - send in the directory to view
|
|
|
+ method - currentPath() returns text of current path
|
|
|
+ signal - selected calls a slot with a single arg: new path
|
|
|
+ '''
|
|
|
+
|
|
|
+ def __init__(self, parent, directory='.'):
|
|
|
+ super(DirWidget,self).__init__(parent)
|
|
|
+ self.directory = directory
|
|
|
+ self.refill()
|
|
|
+ self.bind("<Key>",self.quickFind)
|
|
|
+ self.bind("<Double-Button-1>",self.hit)
|
|
|
+ self.bind("<Return>",self.hit)
|
|
|
+ def hit(self,event):
|
|
|
+ if self.size()==0:
|
|
|
+ return
|
|
|
+ self.directory = os.path.abspath(self.directory + '/' + self.get(ACTIVE))
|
|
|
+ self.refill()
|
|
|
+ self.event_generate("<<DirChanged>>")
|
|
|
+ def refill(self):
|
|
|
+ current,dirs,files = os.walk(self.directory,followlinks=True).__next__()
|
|
|
+ dirs = sorted(dirs, key=lambda s: s.lower())
|
|
|
+ if '/' not in dirs:
|
|
|
+ dirs = ['..'] + dirs
|
|
|
+ self.delete(0,END)
|
|
|
+ for d in dirs:
|
|
|
+ #li = QListWidgetItem(d,self)
|
|
|
+ # replace this with an insert
|
|
|
+ self.insert(END,d)
|
|
|
+ self.selection_set(0)
|
|
|
+ def currentPath(self):
|
|
|
+ return self.directory
|
|
|
+ def quickFind(self,event):
|
|
|
+ if event.char==None or event.char=='' or event.char==chr(13):
|
|
|
+ return
|
|
|
+ event.char = event.char.lower()
|
|
|
+ if event.char not in 'abcdefghijklmnopqrstuvwxyz0123456789_-.%':
|
|
|
+ return
|
|
|
+ print("quickFind: "+event.char+" ")
|
|
|
+ for i in range(self.size()):
|
|
|
+ print("qf get: " + self.get(i))
|
|
|
+ if self.get(i)[0].lower()==event.char:
|
|
|
+ self.activate(i)
|
|
|
+ self.see(i)
|
|
|
+ return
|
|
|
+
|
|
|
+if __name__=="__main__":
|
|
|
+ def alert(some_event):
|
|
|
+ print("dirWidget hit" + str(some_event))
|
|
|
+ os.system('notify-send -t 1500 "file: ' +
|
|
|
+ some_event.widget.currentPath() + '"')
|
|
|
+
|
|
|
+ t = Tk()
|
|
|
+
|
|
|
+ dw = DirWidget(t)
|
|
|
+ dw.pack()
|
|
|
+ t.bind("<<DirChanged>>",alert)
|
|
|
+
|
|
|
+ Button(t,text="quit",command=t.destroy).pack()
|
|
|
+ mainloop()
|
|
|
+
|
|
|
+'''
|
|
|
+notes on Listbox
|
|
|
+properties: can use []
|
|
|
+archivestyle, bg, bd, cursor, disabledforeground, exportselection, font,
|
|
|
+fg, height/width, highlightbacground, listvariable, relief, selectbackground,
|
|
|
+selectforground, selectmode, state, takefocus, x(y)scrollcommand
|
|
|
+methods:
|
|
|
+activate(i),bbox(i),curselection(),delete(i,j),get(i,j),index(i),
|
|
|
+insert(i,data), itemcget(i), itemconfig(i,option),nearest(y),scan_dragto(x,y),
|
|
|
+scan_mark(x,y),see(i),selection_anchor(i),selection_clear(i,j),
|
|
|
+selection_includes(i,j),size(),x/yview(),x/yview_moveto(),x/yview_scroll(),
|
|
|
+inherit-methods:
|
|
|
+after(t,cb),after_cancel(id),after_idle(cb),bell(),bind(seq,cb),
|
|
|
+bind_all(seq,cb),bind_class(cn,seq,cb),bindtags(),cget(opt),clipboard_append(t),
|
|
|
+clipboard_clear(),column_configure(),config[ure](opt),destroy(),
|
|
|
+event_add(v,s),event_delete(v,s),event_generate(s,kw),event_info(),
|
|
|
+focus_displayof(),_force(),_get(),_lastfor(),_set(),
|
|
|
+grab_current(),_release(),_set(),_set_global(),_status(),
|
|
|
+grid_forget(),_propagate(),_remove(),
|
|
|
+image_names(),keys(),lift(),lower(),mainloop(),nametowidget(n),
|
|
|
+option_add(),_clear(),_get(),_readfile(),
|
|
|
+register(f),quit(),rowconfigure(),selection_clear(),_get(),_own(),_own_get(),
|
|
|
+tk_focusFollowsMouse(),_focusNext(),_focusPrev(),
|
|
|
+unbind(),unbind_all(),unbind_class(),update,update_idletasks(),
|
|
|
+wait_variable(v),_visibility(w),_window(w),
|
|
|
+winfo_children(),_class(),_containing(),_depth(),_fpixels(n),_geometry(),
|
|
|
+ _height(),_id(),_ismapped(),_manager(),_name(),_parent(),_pathname(),_pixels(),
|
|
|
+ _pointerx/y(),_reqheight/width(),_rgb(color),_rootx/y(),_screenheight/width(),
|
|
|
+ _screenmmheight/width(),_screenvisual(),_toplevel(),_viewable(),x/y()
|
|
|
+
|
|
|
+
|
|
|
+'''
|