[wxWidget] wxWidget & wxFormBuilder

  • wxWidget & wxFormBuilder
  • 如果你會使用Qt,那wxWidget就更容易上手了,官方下載頁面:

    http://www.wxwidgets.org/downloads/

    安裝方式如下:

    Linux用戶

    • mkdir build_gtk
    • cd build_gtk
    • ../configure
    • make
    • sudo make install
    • sudo ldconfig

    裝完後你就可以透過下面的方式來編譯wxWidget的程式。(假設你的程式叫做main.cpp)

    • g++ -o main main.cpp `wx-config --libs --cxxflags`

    上面的編譯方式跟Gtk很像。

    撰寫過程中你會大量參閱官方的說明文件(比起Qt的官方文件,wxWidget似乎比較難閱讀)

    http://docs.wxwidgets.org/stable/

    為了加速開發的效率,所以我選擇了wxFormBuilder來作為輔助,官方下載如下:

    http://wxformbuilder.org/?page_id=7

    ubuntu用戶可以直接使用下面的指令安裝:

    • sudo apt-get install wxFormBuilder

    如上圖,跟一般的GUI Designer沒有什麼差別,只是不管是Gtk的glade, Qt的Designer或者是wxWidget的wxFormBuilder,他們給我的共通點都是預覽視窗的排版和大小總是和編譯後的差很多,所以往往我都會選擇直接hand-coding。

    wxFormBuilder Tutorials

    http://wiki.wxformbuilder.org/Tutorials/UsingWxFormBuilder

    下面是一個簡單的範例,整合之前在Gtk實做的Randomly Password Generator以及在Qt裡實做Password Security Checking。

    Download: wxPassApp.zip

    上半部是檢查密碼安全度,下半部是產生密碼,為了配合Gauge元件,檢查密碼的演算又在改了一些。

    程式主要的關鍵有兩點。

    • hierarchy structrue :簡單來說就是用繼承的方式來撰寫,Password繼承於PassForm,PassForm繼承於wxFrame,把核心GUI程式碼包在PassForm裡,而關鍵的Events則以virtual fucntion的形式讓derived class去實做。程式主要演算則是包在Password這個類別裡(或者可以用hasA的方式去繼承其他類別),如此一來每次修改ui後,交給wxFormBuilder去更新PassForm.cpp PassForm.h即可(如果大幅度修改還是得手動修正一下程式碼會比較好。)
    • wxString to char* : 跟Qt一樣,wxWidget有自己定義好的string類別-wxString,所以如果要使用傳統的ascii型態的char,勢必要轉換一下才行。

    Windows用戶:

    Download: wxPassApp_mingw.zip

    自行在windows裡編譯wxWidget空間耗用很大,所以直接裝打包好的wxDev-C++會快一點,wxDev-Cpp已經將對應給MinGW和Visual C++的library和include處理好,直接使用即可。比較不解的是wxDevCpp本身就是以GCC 3.42為主要的compiler,但是我在測試編譯過程中出現[Linker error] undefined reference to `__cpu_features_init',還是得加上MinGW的library,你可以直接使用我的範例檔裡的makefile,大致上該有的都設定好了。

    關於MinGW和wxDev-Cpp的安裝方式可以參考這一篇:

    [GCC] GCC for Windows (MinGW/DEV-C++)

Orange - data analysis tool

Installation pip install orange3 Run orange python -m Orange.canvas