1. Pyslvs 編譯進度

  2. 參數式架構

  3. 測試影片

Pyslvs 界面

今天將所有的視窗都用圖層或 Widget 固定化,免得編譯後位置出現落差。

不過也花了許多時間,之後主要是為參數式編輯做架構。

最後決定使用單行文字框做輸入。

未來的輸入界面大約像這樣:


參數式界面改良

在點座標分頁中新增參數表,使用右鍵可以新增或刪除項目,點擊兩下就能編輯數據與註解。

而下方加入點的欄位中,可以打入新增的代碼。

雖然整體改換還需要段時間,但是重要的功能已經有雛型了。

輸入遮罩

遮罩設定存於主視窗中,對話方塊生成時會複製內容,給其所有需要的單行文字框。

有了這個設定,就能避免使用者亂輸入文字了,基本概念如下:

X_coordinate = QLineEdit()
X_coordinate.setValidator(QRegExpValidator(QRegExp(mask)))

其中 mask 是字串,也是篩選的條件。

基本規則如下:

[ 任何文字 ]{ 必要出現次數 , 在接下來的長度內 }

中括弧中是打允許使用者的字元。

[a],使用者必須打入 1 個小寫的 a 才能再繼續之後的規則,可以使用 [0-9] 表示 0 至 9 的數字,[a-z] 表示小寫的 26 個英文字母等等。

大括弧是篩選條件,默認是 {1, 1},第一項是必須打的數量,第二項是這個規則最大的數量。

小括弧是邏輯順序,跟其他程式語言差不多,如 ([a] | [b]{3, 5}) 就是在這個位置可以選擇打入 1 個 a,或是 3 個到 5 個 b。

至於 ^$ 則是標示貼緊字頭與字尾的符號,能夠比較明確,但是要注意是否會導致字頭設下太多規則,而讓使用者打不了半個字。

基本規則容易搞混的話,可以使用簡語,如 ? 符號代表 {0, 1},就是能選擇要不要輸入的意思,可以省略它打入下個規則的字串。

其他簡語可以參考官方網站的說明。

以下是 Pyslvs的遮罩:

#超過10個參數
param_10 = '[1-'+str(int(self.Parameter_list.rowCount()/10))+']?' if self.Parameter_list.rowCount()>=10 else ''
#有參數
param_use = '(^[n]'+param_10+'[0-'+str(int(self.Parameter_list.rowCount())-1)+']$|' if self.Parameter_list.rowCount()>=1 else ''
#最小值 -9999.9999 最大值 9999.9999 的數字
mask = param_use+'^[-]?([1-9][0-9]{1,2})?[0-9][.][0-9]{1,4}$'
if param_use: mask += ')'
self.Mask = QRegExpValidator(QRegExp(mask))
self.X_coordinate.setValidator(self.Mask)
self.Y_coordinate.setValidator(self.Mask)

如果參數表長度超過 1,只要開頭打入 n 這個字母,就會啟用參數規則,而且只能打入目前長度設入的參數代號。

如果沒有設定參數,文字欄內只能填入最大 9999.9999 的數字。

因為要讀表的長度,上述設定在參數表新增或移除項目時就會更新。

另一方面,因為變成了文字欄,為了偵測是否為空值,做了一些小篩選:

x = self.X_coordinate.text() if not self.X_coordinate.text()=="" else self.X_coordinate.placeholderText()
y = self.Y_coordinate.text() if not self.Y_coordinate.text()=="" else self.Y_coordinate.placeholderText()

至於空的欄位上的淡色文字(Place Holder Text)部份地方只是寫好看的,之後可能就直接讀淡色文字來用。例如編輯視窗中只需要改動 X 軸座標,不小心動到 Y 軸座標時直接刪成空欄位,系統可以填回原本的數值。


測試影片

錄製一段粗糙的影片展示目前基本功能。

之後會找一個比較好的軟體剪接。

  1. 路徑追蹤

  2. 程式碼和路徑座標展示

  3. 動態模擬

  4. 距離量測

Pyslvs preview from Union000 on Vimeo.


Comments

comments powered by Disqus