自由學習的風

幽夢影 張潮 少年讀書,如隙中窺月;中年讀書,如庭中望月;老年讀書,如臺上玩月。皆以閱歷之淺深,為所得之淺深耳。

[PyQt5] 學習筆記 QML好強大

2017年10月16日 星期一

Qt5 的發展,未來應該會以 QML(QtQuick) 為主,QWidget應該還會存在,不過,我想應該就只有維設而已了;試了一下,果然很強大,值得用
參考:

[PyQt5] 學習筆記02 線上教材:零基礎學 qt4 編程

雖然是 Qt4,但是很多觀念是一樣的。
線上書籍:零基礎學 qt4 編程

[PyQt5] 學習筆記01 PyQt5 開發環境建置

這篇文章介紹得很不錯,有興趣開發 PyQt5 的夥伴可以看看!
參考:Python3 PyQt5 pycharm 環境搭建


[Python] 打包成執行檔程式

這幾天幫學長做 Linux 上的 GUI 介面,由於主程式是 python,所以找了一些資料,目前還是以 GTK 和 QT 為主流。

做了之後,就順便測試一下幾年前用過的打包程式,cz_freeze, py2exe, pyinstaller,在 Windows 10 x64 + Python 3.6.2 (x64) 的平台上,cz_freeze 和 pyinstaller 都可以,但是 py2exe 在 3.6.2 似乎無法編譯成功。

另外,pyinstaller 的操作完勝另外 2 支程式,方便簡單直接。推薦!! 不過,cz_freeze 可以直接把程式包成安裝檔,直接雙擊 2 下就可以安裝,唯一的缺點是沒有在桌面建立捷徑,美中不足。

[Python] 如何套用 xrc 檔案

參考:UsingXmlResources

感想: xrc 只有單獨介面,所以若要取值或 binding 動作的話,就得自己再寫code處理,雖然已經方便許多,但是似乎還是有些煩瑣。

檔案:main.py, frame.py, gui.xrc
main.py
import wx
import wx.xrc as xrc
GUI_FILENAME       = "gui.xrc"
GUI_MAINFRAME_NAME = "MainFrame"
class MyApp(wx.App):
    def OnInit(self):
        # Load all controls:
        self._do_layout()
        return True
    def _do_layout(self):
        self.res = xrc.XmlResource( GUI_FILENAME )
        self.frame = self.res.LoadFrame( None, GUI_MAINFRAME_NAME )
        self.SetTopWindow(self.frame)
        self.frame.Show(1)
if __name__ == '__main__':
    app = MyApp()
    app.MainLoop()
frame.py
import wx
import wx.xrc as xrc
class MainFrame(wx.Frame):
    def __init__(self):
        pre = wx.PreFrame()
        # the Create step is done by XRC.
        self.PostCreate(pre)
        self.Bind(wx.EVT_WINDOW_CREATE, self.OnCreate)
    def OnCreate(self, event):
        self.Unbind(wx.EVT_WINDOW_CREATE)
        wx.CallAfter(self._PostInit)
        event.Skip()
        return True
    def _PostInit(self):
        # Do all init here
        self.Fit()
        self.SetAutoLayout(True)
        self.btnExit = xrc.XRCCTRL(self, 'btnExit')
        self.Bind(wx.EVT_BUTTON, self.OnBtnExit, self.btnExit)
        # Set properties:
        self.btnExit.SetLabel('Exit')
    def OnBtnExit(self, evt=None):
        self.Close()
gui.xrc
<?xml version="1.0" encoding="UTF-8"?>
<resource version="2.3.0.1">
  <object class="wxFrame" name="demoframe" subclass="form.MainFrame">
    <centered>1</centered>
    <style>wxDEFAULT_FRAME_STYLE</style>
    <title>Testing wx XRC mechanism</title>
    <object class="wxBoxSizer">
      <orient>wxHORIZONTAL</orient>
      <object class="sizeritem">
        <object class="wxPanel">
          <object class="wxBoxSizer">
            <orient>wxHORIZONTAL</orient>
            <object class="sizeritem">
              <object class="wxButton" name="btnExit">
                <label></label>
                <default>1</default>
              </object>
              <flag>wxALL|wxALIGN_CENTRE_VERTICAL|wxALIGN_CENTRE_HORIZONTAL</flag>
              <border>20</border>
            </object>
          </object>
        </object>
        <flag>wxALL|wxEXPAND</flag>
      </object>
    </object>
  </object>
</resource>

PyQt5 學習筆記00

2017年10月14日 星期六

幾年前練習用來做 Linux GUI 介面,這次剛好學長有需要,就再回頭來試試,努力了一下,還好有先做出原型,順便把選單、下拉選單的連結順便加進去。

有些東西還沒完善,有些東西則記錄下來,以免下次又要再重找一次。

Interface Prototype:



Nginx 跑 CodeIgniter 的設定

2017年10月7日 星期六

Reference: https://codeigniter.org.tw/userguide3/general/urls.html

location / {
  try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
  fastcgi_pass unix:/var/run/php5-fpm.sock;
  fastcgi_index index.php;
  fastcgi_split_path_info ^(.+\.php)(.*)$;
  include fastcgi_params;
  fastcgi_param HTTPS off;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

[programming] OpenId 函式庫 CN_match 錯誤

2017年10月6日 星期五

新北 openid 的 php 範例中,openid.php 這支library裡在 #280, #293, #309 這三行中,判斷 ssl 的 CN_match 這個設定已不再使用(deprecated)。
apache2 目前似乎仍可正常使用,不過,放在 nginx 的話,會噴錯誤,將 'CN_match' 自行改成 'peer_name' 可正常執行(共 3 處)。