Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Tkinter
- from Tkinter import *
- import tkMessageBox as messagebox
- import tkFileDialog
- #16進位轉10進位
- def HEX_to_DEC(HEX_string,bit):
- #去除字串中的空白
- HEX_string = re.sub('\s','',HEX_string)
- #若字串長度無法以選擇的位數組(2或4)為一組則顯示錯誤訊息
- if len(HEX_string)%bit != 0:
- messagebox.showerror("Error", u"請輸入正確位數的HEX !")
- #將DEC Entry改回不可寫入的狀態
- E_DEC["state"]="disable"
- return ""
- else:
- DEC=""
- se=len(HEX_string)/bit
- #利用try-except若無法被轉換,則顯示錯誤訊息,並將DEC Entry改回不可寫入的狀態
- try:
- for i in range(se):
- #算出每組啟始和結束於字串中的的位置來做轉換
- y=int(HEX_string[i*bit:i*bit+bit], 16)
- DEC+="%s "%str(y)
- except:
- messagebox.showerror("Error", u"請輸入正確範圍的HEX !")
- E_DEC["state"]="disable"
- return ""
- #若轉換成功則將資料顯示在DEC Entry欄位上,並去除頭尾空白
- message=DEC.strip()
- #排版並顯示
- messageList=message.split(" ")
- DECData=""
- sp=len(messageList)%10
- for j in xrange(len(messageList)/10):
- for i in xrange(10):
- DECData+=messageList[(j*10)+i]+", "
- DECData+="\n"
- for t in range(0,sp):
- if(t==sp-1):
- DECData+=messageList[((len(messageList)/10))*10+t]+"\n"
- else:
- DECData+=messageList[((len(messageList)/10))*10+t]+", "
- return DECData
- #按下轉換按鈕所觸發的事件
- def change_Entry_value():
- #轉換時須先將DEC Entry欄位改為可輸入狀態,結束時再改回
- E_DEC["state"]="normal"
- E_DEC.delete("1.0",END)
- OriDEC=HEX_to_DEC(E_HEX.get(),v.get())
- E_DEC.insert(END,OriDEC)
- E_DEC["state"]="disable"
- return OriDEC
- #讀檔
- def read_file(file):
- #-----
- test=open(file,"r")
- OriTxt=test.readline()
- modTxt=""
- while OriTxt:
- modTxt+=OriTxt.strip('\n')
- OriTxt=test.readline()
- test.close()
- #-----
- return modTxt
- #寫檔
- def write_file(file,message):
- #-----
- test2=open(file,mode="w")
- test2.write(message)
- test2.close()
- #當按開起檔案時,會先選擇文件,再將資料顯示再HEX Entry欄位上
- def open_file():
- filename = tkFileDialog.askopenfilename(title=u"選擇文件")
- E_HEX.delete(0,END)
- try:
- E_HEX.insert(0,read_file(filename).strip())
- except:
- messagebox.showerror("Error", u"檔案開啟時發生錯誤 !")
- #當按儲存檔案時,會先選擇文件,再將顯示在DEC Entry欄位上的資料存到該文件中
- def save_file():
- filename = tkFileDialog.asksaveasfilename(title=u"選擇文件")
- try:
- write_file(filename,E_DEC.get("1.0",END))
- messagebox.showerror("Success", u"檔案儲存成功 !")
- except:
- messagebox.showerror("Error", u"檔案儲存時發生錯誤 !")
- root=Tkinter.Tk()
- root.geometry("600x400")
- xbar=Tkinter.Scrollbar(root,orient=HORIZONTAL)
- E_HEX=Entry(root,xscrollcommand=xbar.set)
- xbar.config(command=E_HEX.xview)
- E_DEC=Text(root,state="disable")
- ybar = Tkinter.Scrollbar(E_DEC)
- E_DEC["yscrollcommand"]=ybar.set
- ybar.config(command=E_DEC.yview)
- v=IntVar()
- #預設為2位數一組
- v.set(2)
- two=Radiobutton(root, text="2", variable=v, value=2)
- four=Radiobutton(root, text="4", variable=v, value=4)
- Label(root,text="HEX:").place(x=20,y=40,width=40, height=20)
- E_HEX.place(x=90,y=20,width=480, height=55)
- xbar.place(x=90,y=85,width=480, height=10)
- Label(root,text="DEC:").place(x=20,y=145,width=40, height=20)
- E_DEC.place(x=90,y=100,width=480, height=150)
- ybar.place(relx=1,x=-10,width=10,relheight=1)
- Label(root,text="幾位數一組:").place(x=20,y=270,width=80, height=20)
- two.place(x=160,y=270,width=40, height=20)
- four.place(x=313,y=270,width=40, height=20)
- Btn_Change=Button(root,text="轉換",command=change_Entry_value).place(x=490,y=260,width=80,height=40)
- Btn_Change=Button(root,text="開啟檔案",command=open_file).place(x=180,y=320,width=80, height=40)
- Btn_Change=Button(root,text="儲存檔案",command=save_file).place(x=350,y=320,width=80, height=40)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement