Content 1.1 案例介绍 1.2 准备工作 2.1 界面模块 2.2 算法核心 2.2.1 二进制 2.2.2 十进制 2.2.3 十六进制 3. 代码汇总[^1]
Content
- 1.1 案例介绍
- 1.2 准备工作
- 2.1 界面模块
- 2.2 算法核心
- 2.2.1 二进制
- 2.2.2 十进制
- 2.2.3 十六进制
- 3. 代码汇总[^1]
- 4. 运行截图
- 5. 后记
1.1 案例介绍
由于网络原理以及单片机课程的需要,我要处理许多关于二进制、十进制和十六进制之间转换的问题,所以编写了一个小软件来替我完成这些工作。
用户只需要输入数字,选择相对应的进制,然后按下转换按钮,即可在输出框中看到其余另外两个进制的转换结果。
# 输入1011
# 进制选择
Binary
# 输出
Decimal: 11
Hexadecimal: B
1.2 准备工作
- Python3.x
2.1 界面模块
界面包括了四个部分内容:接受用户输入、用户选择进制、输出转换结果、开启按钮。
采用 tkinter 中的 grid 布局模式。
2.2 算法核心
这是算法的核心,包括了:
上面三种算法的转换语句。
2.2.1 二进制
2 -> 10:str(int(number, 2))
2 -> 16:''.join(list(str(hex(int(number, 2))).upper())[2:])
2.2.2 十进制
10 -> 2:''.join(list(bin(int(number)))[2:])
10 -> 16:''.join(list(hex(int(number)).upper())[2:])
2.2.3 十六进制
16 -> 2:''.join(list(bin(int(str(int(number.upper(), 16)))))[2:])
16 -> 10:str(int(number.upper(), 16))
3. 代码汇总1
# encoding: utf-8# !/usr/bin/python
"""
@Filename:进制转换
@Author: jiaming
@Create date:2018/12/21下午 07:28
@description: 提供二进制、十进制、十六进制之间的转换,使用 grid 布局方式
@Update date:
@File url:
"""
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()
4. 运行截图
5. 后记
以上就是关于进制转换案例的全部内容,希望你们喜欢,如果有什么问题,欢迎私信哦。如果比较受大家欢迎的话,下期咱们介绍关于如何将这个案例打包的话题。
欢迎关注我的我的知乎专栏,里面有更多关于 python 的精彩知识分享哦~