上次我爬了n多圖片,但是瀏覽的時候有一個問題。
圖片瀏覽器的瀏覽一般都是按名稱排的,而我對圖片的命名是按照數字遞增的。比如3總是會排在10后面,也就無法快速地瀏覽圖片了。
所以,出于方便自己查閱圖片,也出于學習,決定做一個自己的圖片瀏覽器。
目標:瀏覽目錄,通過滾輪不斷顯示同一個文件夾下的圖片,并自定義排序。
步驟0:要實現圖形界面,我使用wxPython。
至于如何安裝和簡單地使用wxpython,可以到網上檢索,一大堆資料。
以下步驟默認你已經知道如何生成一個自己的frame。
步驟1:瀏覽目錄。
這個功能就是類似于打開“我的電腦”,然后不斷地進入文件夾和返回。
通過幾種嘗試,我決定使用listbox。
我初始化一個app。用一個frame實現目錄的功能,其上只有一個listbox;用另一個frame實現圖片展示的功能,兩個frame通過app進行信息的傳遞。
代碼如下:
for _dir in os.listdir(dir):
#do something
其中像os.path.split()、os.path.splitext()、os.path.isdir()等,都是很常用的一些方法。
顯示目錄就是一個不斷地獲取你選擇的目錄,進入目錄,讀取其下目錄,清空listbox,顯示目錄,更改工作路徑的過程。
顯示目錄的時候,自定義排序功能就來了。通過對圖片名稱進行處理,轉為數字,排序,然后再重新組裝回去,從而達到按數字遞增的效果。
代碼如下:
self.list.Bind(wx.EVT_LISTBOX_DCLICK, self.OnDClick)
同時通過以上方法為listbox綁定了雙擊事件。若是雙擊目錄則進入目錄,否則顯示通過app展示圖片。
同時這個frame需要具備兩個方法,就是獲取上一張或下一張圖片,為了后續app的調用。
步驟2:顯示圖片
這個圖片展示一開始感覺挺麻煩的,但是弄懂了之后就很簡單了。
我用一個frame展示圖片。
frame上面空白,有一個wx.StaticBitmap,之后顯示圖片的時候只需要往這個staticbitmap寫bitmap就可以了。一開始我是不斷地新建staticbitmap,導致了一些可以看到但是那時候不知道為什么的原因。
然后在這個frame上檢測鼠標滾輪事件,通過向上或向下滾輪調用app的GetNextImage和GetPreImage方法并將獲得的圖片顯示出來。
還有圖片的大小,我先規定了一個最大值和最小值,將圖片約束在一定的范圍內。
代碼如下:
bmp = image.Scale(size[0], size[1]).ConvertToBitmap()
self.bmp.SetSize(size)#bmp是staticbitmap
self.bmp.SetBitmap(bmp)
但是一個小窗口看圖片很不爽,于是將圖片窗口全屏化。
代碼如下:
self.ShowFullScreen(True, style=wx.FULLSCREEN_ALL)
全屏化就要考慮怎么退出了。我通過按鍵發送消息,命令窗口關閉或顯示。若顯示則關閉(其實只是隱藏),若隱藏則顯示。注意這個事件要綁定到app上面。
新聞熱點
疑難解答