Bläddra i källkod

added the Tkinter new code....dirWidget first (python3)

Pat Beirne 9 år sedan
förälder
incheckning
e8b002555f
1 ändrade filer med 109 tillägg och 0 borttagningar
  1. 109 0
      dirWidget2.py

+ 109 - 0
dirWidget2.py

@@ -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()
+
+
+'''