案例介绍
由于网络原理以及单片机课程的需要,我要处理许多关于二进制、十进制和十六进制之间转换的问题,所以编写了一个小软件来替我完成这些工作。
用户只需要输入数字,选择相对应的进制,然后按下转换按钮,即可在输出框中看到其余另外两个进制的转换结果。
# 输入
1011
# 进制选择
Binary
# 输出
Decimal: 11
Hexadecimal: B
准备工作
- Python3.x
界面模块
界面包括了四个部分内容:接受用户输入、用户选择进制、输出转换结果、开启按钮。
采用 tkinter 中的 grid 布局模式。
算法核心
这是算法的核心,包括了:
- 二进制 -> 十进制、十六进制。
- 十进制 -> 二进制、十六进制。
- 十六进制 -> 二进制、十进制。
上面三种算法的转换语句。
二进制转换过程
2 -> 10:str(int(number, 2))
2 -> 16:''.join(list(str(hex(int(number, 2))).upper())[2:])
十进制转换过程
10 -> 2:''.join(list(bin(int(number)))[2:])
10 -> 16:''.join(list(hex(int(number)).upper())[2:])
十六进制转换过程
16 -> 2:''.join(list(bin(int(str(int(number.upper(), 16)))))[2:])
16 -> 10:str(int(number.upper(), 16))
代码汇总[1]
# encoding: utf-8
# !/usr/bin/python
"""
@Filename:进制转换
@Author: jiaming
@Create date:2018/12/21下午 07:28
@description: 提供二进制、十进制、十六进制之间的转换,使用 grid 布局方式
@Update date:
@File url: https://blog.csdn.net/weixin_39541632/article/details/105738227
"""
import tkinter as tk
# 提示框,下拉菜单
from tkinter import messagebox, ttk
# 界面对象的基本参数设置
root = tk.Tk()
root.title("进制转换")
root.geometry('520x200+250+250')
# 设置界面是否可以随意拉伸
root.resizable(False, False)
radix = '' # 存储输入数字的进制(Binary)
number = '' # 存储需要转化的数字
text = '' # 输出框文本内容
def draw():
"""
绘制界面
包括有输入框, 输出框, 下拉菜单, 图片
:return:
"""
# 输入数字
tk.Label(root, text='输入数字', font=('Times', 16)).grid(row=0,
column=0,
sticky=tk.W + tk.E)
# 进制选择
tk.Label(root, text='进制选择', font=('Times', 16)).grid(row=0,
column=1,
sticky=tk.W + tk.E)
# 输入框设置
inputWord = tk.StringVar()
tk.Entry(root, width=50, textvariable=inputWord).grid(row=1,
column=0,
sticky=tk.E)
# 转换结果
tk.Label(root, text='转换结果', font=('Times', 16)).grid(row=2,
column=0,
sticky=tk.W + tk.E)
# 输出框设置
outputWord = tk.Text(root, width=50, height=5, font=('Arial', 10))
outputWord.grid(row=3, column=0, sticky=tk.E)
# 下拉菜单设置
# 创建下拉菜单
# 将下拉列表设置成为只读模式
cmb = ttk.Combobox(root, width=20, state='readonly')
cmb.grid(row=1, column=1, sticky=tk.E)
# 设置下拉菜单中的值
cmb['value'] = ('Binary', 'Decimal', 'Hexadecimal')
def buttonCommand():
"""
实现按钮功能
:return:
"""
global radix, number
# 获取下拉菜单中的值
if cmb.get() == '':
return None
# 获取下拉菜单中内容的首字母
elif cmb.get()[0] == 'B':
# 保存到变量中
radix = 'Binary'
# print('Binary')
elif cmb.get()[0] == 'D':
radix = 'Decimal'
# print('Decimal')
elif cmb.get()[0] == 'H':
radix = 'Hexadecimal'
# print('Hexadecimal')
# 将用户输入的数字保存到变量中
number = inputWord.get()
# 清空输出框中内容
outputWord.delete(1.0, tk.END)
# 调用算法核心函数
text = calculate()
# 将结果插入到输出框中
outputWord.insert(1.0, text)
# 设置Button
btn = tk.Button(root,
text="转换",
command=buttonCommand, # 绑定按钮事件(指向函数即可)
width=20,
height=2,
activebackground='gray',
fg='black')
btn.grid(row=2, column=1, sticky=tk.N + tk.E + tk.W)
def calculate():
"""
计算进制转化结果
Decimal
Hexadecimal
Binary
:return: 其余两个进制的转换结果
"""
if radix == 'Decimal':
try:
text = 'Binary: ' + ''.join(list(bin(int(number)))[2:])
text += 'n'
text += 'Hexadecimal: ' + ''.join(list(hex(int(number)).upper())[2:])
return text
except (ValueError):
messagebox.showerror('消息框', '错误!')
elif radix == 'Binary':
try:
text = 'Decimal: ' + str(int(number, 2))
text += 'n'
text += 'Hexadecimal: ' + ''.join(
list(str(hex(int(number, 2))).upper())[2:])
return text
except (ValueError):
messagebox.showerror('消息框', '错误!')
elif radix == 'Hexadecimal':
try:
text = 'Binary: ' + ''.join(
list(bin(int(str(int(number.upper(), 16)))))[2:])
text += 'n'
text += 'Decimal: ' + str(int(number.upper(), 16))
return text
except (ValueError):
messagebox.showerror('消息框', '错误!')
if __name__ == "__main__":
draw()
root.mainloop()
运行截图
后记
以上就是关于进制转换案例的全部内容,希望你们喜欢,如果有什么问题,欢迎私信哦。如果比较受大家欢迎的话,下期咱们可以聊聊如何将我们的这个案例打包的话题。
欢迎关注我的 CSDN 博客,里面有更多关于 python 的精彩知识分享哦~
CSDN-专业IT技术社区-登录jiaming.blog.csdn.net参考
- ^本软件受到著作权保护。