PDA

View Full Version : Making work wxPython File Hunter (file manager)



honeybear
December 10th, 2012, 05:10 PM
Hi,

I have being trying to make work file hunter, but no way. I created all the png's but it did not help.

Does it work for you?

http://zetcode.com/wxpython/skeletons/

Greetings


filehunter.py


#!/usr/bin/python

import wx
import os
import time


ID_BUTTON=100
ID_EXIT=200
ID_SPLITTER=300

class MyListCtrl(wx.ListCtrl):
def __init__(self, parent, id):
wx.ListCtrl.__init__(self, parent, id, style=wx.LC_REPORT)

files = os.listdir('.')
images = ['images/empty.png', 'images/folder.png', 'images/source_py.png',
'images/image.png', 'images/pdf.png', 'images/up16.png']

self.InsertColumn(0, 'Name')
self.InsertColumn(1, 'Ext')
self.InsertColumn(2, 'Size', wx.LIST_FORMAT_RIGHT)
self.InsertColumn(3, 'Modified')

self.SetColumnWidth(0, 220)
self.SetColumnWidth(1, 70)
self.SetColumnWidth(2, 100)
self.SetColumnWidth(3, 420)

self.il = wx.ImageList(16, 16)
for i in images:
self.il.Add(wx.Bitmap(i))
self.SetImageList(self.il, wx.IMAGE_LIST_SMALL)

j = 1
self.InsertStringItem(0, '..')
self.SetItemImage(0, 5)

for i in files:
(name, ext) = os.path.splitext(i)
ex = ext[1:]
size = os.path.getsize(i)
sec = os.path.getmtime(i)
self.InsertStringItem(j, name)
self.SetStringItem(j, 1, ex)
self.SetStringItem(j, 2, str(size) + ' B')
self.SetStringItem(j, 3, time.strftime('%Y-%m-%d %H:%M',
time.localtime(sec)))

if os.path.isdir(i):
self.SetItemImage(j, 1)
elif ex == 'py':
self.SetItemImage(j, 2)
elif ex == 'jpg':
self.SetItemImage(j, 3)
elif ex == 'pdf':
self.SetItemImage(j, 4)
else:
self.SetItemImage(j, 0)

if (j % 2) == 0:
self.SetItemBackgroundColour(j, '#e6f1f5')
j = j + 1


class FileHunter(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, -1, title)

self.splitter = wx.SplitterWindow(self, ID_SPLITTER, style=wx.SP_BORDER)
self.splitter.SetMinimumPaneSize(50)

p1 = MyListCtrl(self.splitter, -1)
p2 = MyListCtrl(self.splitter, -1)
self.splitter.SplitVertically(p1, p2)

self.Bind(wx.EVT_SIZE, self.OnSize)
self.Bind(wx.EVT_SPLITTER_DCLICK, self.OnDoubleClick, id=ID_SPLITTER)

filemenu= wx.Menu()
filemenu.Append(ID_EXIT,"E&xit"," Terminate the program")
editmenu = wx.Menu()
netmenu = wx.Menu()
showmenu = wx.Menu()
configmenu = wx.Menu()
helpmenu = wx.Menu()

menuBar = wx.MenuBar()
menuBar.Append(filemenu,"&File")
menuBar.Append(editmenu, "&Edit")
menuBar.Append(netmenu, "&Net")
menuBar.Append(showmenu, "&Show")
menuBar.Append(configmenu, "&Config")
menuBar.Append(helpmenu, "&Help")
self.SetMenuBar(menuBar)
self.Bind(wx.EVT_MENU, self.OnExit, id=ID_EXIT)

tb = self.CreateToolBar( wx.TB_HORIZONTAL | wx.NO_BORDER |
wx.TB_FLAT | wx.TB_TEXT)
tb.AddSimpleTool(10, wx.Bitmap('images/previous.png'), 'Previous')
tb.AddSimpleTool(20, wx.Bitmap('images/up.png'), 'Up one directory')
tb.AddSimpleTool(30, wx.Bitmap('images/home.png'), 'Home')
tb.AddSimpleTool(40, wx.Bitmap('images/refresh.png'), 'Refresh')
tb.AddSeparator()
tb.AddSimpleTool(50, wx.Bitmap('images/write.png'), 'Editor')
tb.AddSimpleTool(60, wx.Bitmap('images/terminal.png'), 'Terminal')
tb.AddSeparator()
tb.AddSimpleTool(70, wx.Bitmap('images/help.png'), 'Help')
tb.Realize()

self.sizer2 = wx.BoxSizer(wx.HORIZONTAL)

button1 = wx.Button(self, ID_BUTTON + 1, "F3 View")
button2 = wx.Button(self, ID_BUTTON + 2, "F4 Edit")
button3 = wx.Button(self, ID_BUTTON + 3, "F5 Copy")
button4 = wx.Button(self, ID_BUTTON + 4, "F6 Move")
button5 = wx.Button(self, ID_BUTTON + 5, "F7 Mkdir")
button6 = wx.Button(self, ID_BUTTON + 6, "F8 Delete")
button7 = wx.Button(self, ID_BUTTON + 7, "F9 Rename")
button8 = wx.Button(self, ID_EXIT, "F10 Quit")

self.sizer2.Add(button1, 1, wx.EXPAND)
self.sizer2.Add(button2, 1, wx.EXPAND)
self.sizer2.Add(button3, 1, wx.EXPAND)
self.sizer2.Add(button4, 1, wx.EXPAND)
self.sizer2.Add(button5, 1, wx.EXPAND)
self.sizer2.Add(button6, 1, wx.EXPAND)
self.sizer2.Add(button7, 1, wx.EXPAND)
self.sizer2.Add(button8, 1, wx.EXPAND)

self.Bind(wx.EVT_BUTTON, self.OnExit, id=ID_EXIT)

self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.splitter,1,wx.EXPAND)
self.sizer.Add(self.sizer2,0,wx.EXPAND)
self.SetSizer(self.sizer)

size = wx.DisplaySize()
self.SetSize(size)

self.sb = self.CreateStatusBar()
self.sb.SetStatusText(os.getcwd())
self.Center()
self.Show(True)


def OnExit(self,e):
self.Close(True)

def OnSize(self, event):
size = self.GetSize()
self.splitter.SetSashPosition(size.x / 2)
self.sb.SetStatusText(os.getcwd())
event.Skip()


def OnDoubleClick(self, event):
size = self.GetSize()
self.splitter.SetSashPosition(size.x / 2)

app = wx.App(0)
FileHunter(None, -1, 'File Hunter')
app.MainLoop()

spjackson
December 10th, 2012, 10:35 PM
In what way does it not work for you? It basically works for me. The buttons don't do anything, but it's a skeleton - I don't think they are supposed to do anything.

It's a pain in the neck having to create all the pngs and I'm not sure what size they should be. The toolbar icons look OK. The icons associated with file types look less good, but I suspect that's because I don't have the right size.

honeybear
December 11th, 2012, 08:21 AM
In what way does it not work for you? It basically works for me. The buttons don't do anything, but it's a skeleton - I don't think they are supposed to do anything.

It's a pain in the neck having to create all the pngs and I'm not sure what size they should be. The toolbar icons look OK. The icons associated with file types look less good, but I suspect that's because I don't have the right size.

damn I got some errors msg. I cant make it run

Which are the dependencies you may assume that I miss? wxpython and what else?

honeybear
December 11th, 2012, 08:38 AM
now I know..

it works under linux but not under windwos

spjackson
December 11th, 2012, 04:36 PM
I repeat, in what way does it not work for you? If you cannot answer that question, I don't see how you can expect anyone to be able to help you.


I got some errors msg. I cant make it run

What error messages? Does it display a GUI window or not?

It works for me (for some arbitrary definition of "works") with Windows 7 (64-bit), Python 2.7 (64-bit), wxPython 2.8 for 64-bit Python 2.7.

As on Linux, I also get some issues with the images I've gathered for it, but I've no idea whether that is related to the unspecified symptoms you are experiencing.

jw37
December 11th, 2012, 05:21 PM
Just a side note about images, you can also use wx.ArtProvider to get the arrow and cottage bitmaps:

http://www.wxpython.org/docs/api/wx.ArtProvider-class.html


bmp_home = wx.ArtProvider.GetBitmap(wx.ART_GO_HOME)