Advertisement
Guest User

HEXtoDEC

a guest
Jul 21st, 2019
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.22 KB | None | 0 0
  1. import Tkinter
  2. from Tkinter import *
  3. import tkMessageBox as messagebox
  4. import tkFileDialog
  5. #16進位轉10進位
  6. def HEX_to_DEC(HEX_string,bit):
  7. #去除字串中的空白
  8.     HEX_string = re.sub('\s','',HEX_string)
  9. #若字串長度無法以選擇的位數組(2或4)為一組則顯示錯誤訊息
  10.     if len(HEX_string)%bit != 0:
  11.         messagebox.showerror("Error", u"請輸入正確位數的HEX !")
  12. #將DEC Entry改回不可寫入的狀態
  13.         E_DEC["state"]="disable"
  14.         return ""
  15.     else:
  16.         DEC=""
  17.         se=len(HEX_string)/bit
  18. #利用try-except若無法被轉換,則顯示錯誤訊息,並將DEC Entry改回不可寫入的狀態
  19.         try:
  20.             for i in range(se):
  21. #算出每組啟始和結束於字串中的的位置來做轉換
  22.                 y=int(HEX_string[i*bit:i*bit+bit], 16)
  23.                 DEC+="%s "%str(y)
  24.         except:
  25.             messagebox.showerror("Error", u"請輸入正確範圍的HEX !")
  26.             E_DEC["state"]="disable"
  27.             return ""
  28. #若轉換成功則將資料顯示在DEC Entry欄位上,並去除頭尾空白
  29.     message=DEC.strip()
  30. #排版並顯示
  31.     messageList=message.split(" ")
  32.     DECData=""
  33.     sp=len(messageList)%10
  34.     for j in xrange(len(messageList)/10):
  35.         for i in xrange(10):
  36.             DECData+=messageList[(j*10)+i]+", "
  37.         DECData+="\n"
  38.     for t in range(0,sp):
  39.         if(t==sp-1):
  40.             DECData+=messageList[((len(messageList)/10))*10+t]+"\n"
  41.         else:
  42.             DECData+=messageList[((len(messageList)/10))*10+t]+", "
  43.     return DECData
  44. #按下轉換按鈕所觸發的事件
  45. def change_Entry_value():
  46. #轉換時須先將DEC Entry欄位改為可輸入狀態,結束時再改回
  47.     E_DEC["state"]="normal"
  48.     E_DEC.delete("1.0",END)
  49.     OriDEC=HEX_to_DEC(E_HEX.get(),v.get())
  50.     E_DEC.insert(END,OriDEC)
  51.     E_DEC["state"]="disable"
  52.     return OriDEC
  53. #讀檔
  54. def read_file(file):
  55.     #-----
  56.     test=open(file,"r")
  57.     OriTxt=test.readline()
  58.     modTxt=""
  59.     while OriTxt:
  60.         modTxt+=OriTxt.strip('\n')
  61.         OriTxt=test.readline()
  62.     test.close()
  63.     #-----
  64.     return modTxt
  65. #寫檔
  66. def write_file(file,message):
  67.     #-----
  68.     test2=open(file,mode="w")
  69.     test2.write(message)
  70.     test2.close()
  71. #當按開起檔案時,會先選擇文件,再將資料顯示再HEX Entry欄位上
  72. def open_file():
  73.     filename = tkFileDialog.askopenfilename(title=u"選擇文件")
  74.     E_HEX.delete(0,END)
  75.     try:
  76.         E_HEX.insert(0,read_file(filename).strip())
  77.     except:
  78.         messagebox.showerror("Error", u"檔案開啟時發生錯誤 !")
  79. #當按儲存檔案時,會先選擇文件,再將顯示在DEC Entry欄位上的資料存到該文件中
  80. def save_file():
  81.     filename = tkFileDialog.asksaveasfilename(title=u"選擇文件")
  82.     try:
  83.         write_file(filename,E_DEC.get("1.0",END))
  84.         messagebox.showerror("Success", u"檔案儲存成功 !")
  85.     except:
  86.         messagebox.showerror("Error", u"檔案儲存時發生錯誤 !")
  87. root=Tkinter.Tk()
  88. root.geometry("600x400")
  89. xbar=Tkinter.Scrollbar(root,orient=HORIZONTAL)
  90.  
  91. E_HEX=Entry(root,xscrollcommand=xbar.set)
  92. xbar.config(command=E_HEX.xview)
  93. E_DEC=Text(root,state="disable")
  94. ybar = Tkinter.Scrollbar(E_DEC)
  95. E_DEC["yscrollcommand"]=ybar.set
  96. ybar.config(command=E_DEC.yview)
  97. v=IntVar()
  98. #預設為2位數一組
  99. v.set(2)
  100. two=Radiobutton(root, text="2", variable=v, value=2)
  101. four=Radiobutton(root, text="4", variable=v, value=4)
  102. Label(root,text="HEX:").place(x=20,y=40,width=40, height=20)
  103. E_HEX.place(x=90,y=20,width=480, height=55)
  104. xbar.place(x=90,y=85,width=480, height=10)
  105. Label(root,text="DEC:").place(x=20,y=145,width=40, height=20)
  106. E_DEC.place(x=90,y=100,width=480, height=150)
  107. ybar.place(relx=1,x=-10,width=10,relheight=1)
  108. Label(root,text="幾位數一組:").place(x=20,y=270,width=80, height=20)
  109. two.place(x=160,y=270,width=40, height=20)
  110. four.place(x=313,y=270,width=40, height=20)  
  111. Btn_Change=Button(root,text="轉換",command=change_Entry_value).place(x=490,y=260,width=80,height=40)
  112. Btn_Change=Button(root,text="開啟檔案",command=open_file).place(x=180,y=320,width=80, height=40)
  113. Btn_Change=Button(root,text="儲存檔案",command=save_file).place(x=350,y=320,width=80, height=40)
  114. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement