Python的GUI大致上有以下選擇,其實就涵蓋了主流的幾個知名 Framework:
- pygtk
- pyQt
- wxPython
- IronPython+Windows form+.Net framework
- tkinter(tcl/tk)
pygtk、pyqt、wxpython、IronPython都需要安裝額外的runtime library,實在太麻煩,所以後來決定用 Windows python 就有內建的 tkinter 來做。python tkinter 實際上是 tcl/tk 的 binding,我不知道為什麼會包進去,不過既然有,那就方便多了。
教學可以參考PythonInfo 上的 TkInter,如果有碰過 pygtk,那麼,應該是不難。介面也大致跟 Windows 內建的相近,這邊我的心得就是其實可以不用 TopLevel,這會導致多一個多餘的視窗。
window=Tk()
window.title( "my_app" )
window.mainloop() # 直接呼叫 mainloop() 也可以
文字欄位的存取是用 Entry,Entry 內容的存取要透過 StringVar,也就是你要先產生一個 StringVar 物件,Assign 這個物件給 Entry 之後,才能用這個 StringVar 物件來存取。
filename_var=StringVar()
entry=Entry( window, width=100, textvariable=filename_var )
entry.pack() # 一定要 pack 一下才會出現,要不然你什麼都看不到。
filename_var.set( "Hello" ) # 賦值
print filename_var.get() # 取值
寫到這裡,UI 已經悄然成型,但是字都...好小,找了好久,最後不得已,先產生 global font 物件之後,再一個一個控制項去設定字型:
global_font=("Arial",12)
entry=Entry( window, font=global_font, width=100, textvariable=filename_var )
好了,大致的 UI 有了,那麼怎麼選取檔案,原本以為要自己作一個 Dialog,後來仔細看過官方 TkInter文件之後,發現有提到一個 tkFileDialog,但卻沒提及用法。再根據 python tkFileDialog 關鍵字去找,發現 ActiveState Code上的這篇有使用範例,有了這個再去挖 source code,就可以知道有哪些 method 可以用,我只用到 tkFileDialog.askopenfilename()跟tkFileDialog.asksaveasfilename()。這個 Dialog 的底層是用到 Windows 內建的 Dialog,所以至少介面跟 Windows 接近一致了。
filename=tkFileDialog.askopenfilename( title="Select a file", filetypes=[
( 'JPEG files', '*.jpg' )
] )
output_html=tkFileDialog.asksaveasfilename( title="Save output as...", filetypes=[
( 'HTML files', '*.html' )
] )
沒有留言:
張貼留言