0
点赞
收藏
分享

微信扫一扫

【案例】进制转换程序(界面)


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 算法核心

这是算法的核心,包括了:

  1. 二进制 -> 十进制、十六进制。
  2. 十进制 -> 二进制、十六进制。
  3. 十六进制 -> 二进制、十进制。

上面三种算法的转换语句。

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. 运行截图

【案例】进制转换程序(界面)_python
【案例】进制转换程序(界面)_十六进制_02
【案例】进制转换程序(界面)_下拉菜单_03

5. 后记

以上就是关于进制转换案例的全部内容,希望你们喜欢,如果有什么问题,欢迎私信哦。如果比较受大家欢迎的话,下期咱们介绍关于如何将这个案例打包的话题。

【案例】进制转换程序(界面)_python_04

欢迎关注我的​​我的知乎专栏​​,里面有更多关于 python 的精彩知识分享哦~

  1. 本软件受到著作权保护。​​↩︎​​


举报

相关推荐

0 条评论