2015年8月28日 星期五

Raspberry Pi 上的 Python 筆記 -- Tkinter


之前一開始學 Python 的時候就接觸過有關 GUI 的開發,不過那個時候因為還是程式語言初學者,連類別都還沒搞懂,想當然爾就不了了之。 最近則是要在 Raspberry Pi 上面用 GUI 介面的操作設計出來的系統,所以才又重新把目光放到Python的GUI函示庫。

上網找了一下,Python 大概有常見的GUI Framework 為  Tkinter、wxPython、pyQt 這三個。當初學的是 wxPython ,感覺還蠻簡單好用的。但就初學者而言,還是建議從 Tkinter 開始學起,因為其架構簡單好學,缺點就是功能上較沒有其他兩套這麼豐富,但就要建構一個簡單的像是控制系統而言,已經足夠了。而且是 Python 的標準套件庫,直接支援 Python2 和 Python3 ,安裝也較簡單,有時候甚至已經內建在其中了。

不過廢話不多說,下面就開始第一個連 Hello World 都不算是的範例程式碼:
-----------------------
-----------------------
先來看第一行程式碼

root = tk.Tk()

tk.Tk() 會回傳一個物件代表這個程式的主視窗,而我的習慣取名為 root 。這個主視窗物件有一個 .mainloop() 的method ,呼叫之後程式的進行就會進入一個無窮迴圈,並且卡在這裡,同時畫面上就會跳出來一個小視窗。這個就是這個程式的主視窗。


按右上的叉叉鈕,該程式就會停止。

接下來在這個主視窗內,放進去一個按鈕元件(button)

-------------------------
-------------------------



程式碼

button = tk.Button(master=root,text="hello", command=btn_call_back)

回傳了一個按鈕物件,其中將 root 物件用 "master" 參數傳入表示將這個 Button 物件 "掛" 在主視窗物件 "root" 的下面。Tkinter 裡的物件關係架構像是一個樹狀圖,每個物件都會有一個 "上層" 物件叫 master 。最上層的主視窗 (root) 為整個樹狀結構的最上層所以不用。

text 參數傳入一個字串,當做是按鈕上面顯示出來的文字。command 參數則傳入一個 function pointer (用 C 語言的說法,之後這樣的說法就叫 "慣C" 說法好了。),只要這個Button 被按下去,就會去執行該行程式碼。

<忽然覺得好累...待續...>


2015年8月25日 星期二

ADC 取樣後求Peak 值



一個類比訊號, 經由ADC 取樣並轉換後的數位值(raw data),以gnuplot 繪出後如下圖, 如何針對raw data 找出所有波峰值與波谷值 ? 





Sample.txt

2015年8月22日 星期六

程式打在MS power point上,令人討厭的幾件事!



每次用power point 時編輯程式教學投影時, 常常程式用的字串雙引號, 常會變成  “abcde”,我要的是 "abcde", 換了其他字型也沒用, 另一個問題是, 變數明明打的小寫命名, 每次變數第一個字母都自動轉成大寫, ...

有沒有辦法解決這個問題呢?

進入Power Point 取消自動轉換, 3個step 搞定...






2015年8月3日 星期一

Python程式-格式化輸出與字串處理 (三)


格式化輸出 Print: 結構語法基本上同C/C++語言printf


>>> a=4
>>> b=5

>>> print('a=%d'%a)
a=4
>>> print(a,'*',b,'=',a*b)
4 * 5 = 20

一個以上的%d 輸出
>>> print('%d*%d=%d'%(a,b,a*b))
4*5=20

# 多了和C不一樣的功能, 可以用dict的結構,用key找對應的value來輸出
>>> print('%(#2)d*%(#1)d=%(#v)d'%{'#1':a,'#2':b,'#v':a*b})
5*4=20


>>> print('a=%d'%a)
a=4
>>> print('a=%10d'%a)  # 空10格
a=         4
>>> print('a=%010d'%a)  # 空10格且前面補0
a=0000000004

卬浮點數 %f
>>> money=172.85
>>> print('%f',money)
%f 172.85

>>> print('%f'%money)
172.850000

>>> print('$%6.2f''%money)
$172.85

>>> print('$%*.2f'%(10,money)) # 空10格
$         172.85

字串函數


>>> text='it robotic lab'
>>> text.capitalize()
'It robotic lab'
>>> text
'it robotic lab'

>>> text=text.capitalize()  #存回text
>>> text
'It robotic lab'

Python 流程控制(二)



if 

>>> x = int(input("Please enter an integer: "))
Please enter an integer: 42
>>> if x < 0:
...     x = 0
...     print('Negative changed to zero')
... elif x == 0:
...     print('Zero')
... elif x == 1:
...     print('Single')
... else:
...     print('More')
...

for 

>>> # Measure some strings:
... words = ['cat', 'window', 'defenestrate']
>>> for w in words:
...     print(w, len(w))
...
cat 3
window 6
defenestrate 12


>>> for w in words[:]:  # Loop over a slice copy of the entire list.
...     if len(w) > 6:
...         words.insert(0, w)
...
>>> words
['defenestrate', 'cat', 'window', 'defenestrate']


Range (n) 產生0~n-1序列


>>> for i in range(5):
...     print(i)
...
0
1
2
3
4

a = ['Mary', 'had', 'a', 'little', 'lamb']
for i in range(len(a)):
     print(i, a[i])

0 Mary
1 had
2 a
3 little
5 lamb


while 

a = ['Mary', 'had', 'a', 'little', 'lamb']
i=0
while i < len(a):
    print(i, a[i])
    i+=1
0 Mary 1 had 2 a 3 little 4 lamb