python tkinter 匯率換算器

其實我最近正在學pyqt,然後看到有個例子是匯率換算器,所以無聊之下換成用tkinter來寫寫看code如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

def test2():
import tkinter
from tkinter import ttk

rates = {}

def getdata():
nonlocal rates
try:
date = 'unknown'
fh = request.urlopen("http://www.bankofcanada.ca/en/markets/csv/exchange_eng.csv")
#always remember that in python3 this function returns byte object!!
for line in fh:
line = line.decode('utf-8')# so need to decode
if not line or line.startswith(('#', "Closing ")):
continue
fields = line.split(',')
if line.startswith("Date "):
date = fields[-1]
else:
try:
value = float(fields[-1])
rates[fields[0]] = value
except ValueError:
pass
return "Exchange Rates Date: "+ date
except Exception as e:
return "Failed to downloads:\n%s" % e

def show(event):
try:
num = float(entry.get())
except:
pass

fromCur = float(rates[fromCombo.get()])
toCur = float(rates[toCombo.get()])
result['text'] = fromCur/toCur * num


root = tkinter.Tk()

dateLabel = ttk.Label(root, text=getdata())
listVar = sorted(rates.keys())


fromCombo = ttk.Combobox(root, values=listVar, state='readonly')
fromCombo.current(0)
toCombo = ttk.Combobox(root, values=listVar, state='readonly')
toCombo.current(0)

entry = tkinter.Entry(root)
result = ttk.Label(root, text='...')

calculate = ttk.Button(root, text='calculate')
calculate.bind('<Button-1>', show)


dateLabel.grid(column=0, row=0, columnspan=2, padx=5)
fromCombo.grid(column= 0, row=1, padx=10, pady=5)
toCombo.grid(column=0, row=2, padx=10, pady=5)
entry.grid(column=1, row=1, padx=10, pady=5)
result.grid(column=1, row=2, padx=10, pady=5)
calculate.grid(column=0, row=3, columnspan=2)

root.mainloop()


if __name__ == '__main__':
test2()

由於只是嘗試寫寫所以就沒有特別去想結構了,用了不怎麼好看的寫法 :)
只是有個地方滿好奇的,我用這匯率去算跟台銀給的匯率計算器得出的結果不一樣(汗,不過其實我也不太懂匯率是怎麼得出來的,所以用這個程式得出來的結果看看就好,想要知道目前的匯率還是去台銀官網看吧 :) 或者就是把這篇code所抓取的csv改成台銀的 :)