-
Pyslvs 編譯進度
-
參數式架構
-
測試影片
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 軸座標時直接刪成空欄位,系統可以填回原本的數值。
測試影片
錄製一段粗糙的影片展示目前基本功能。
之後會找一個比較好的軟體剪接。
-
路徑追蹤
-
程式碼和路徑座標展示
-
動態模擬
-
距離量測
Pyslvs preview from Union000 on Vimeo.
Comments
comments powered by Disqus