当前位置 : 主页 > 编程语言 > python >

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

来源:互联网 收集:自由互联 发布时间:2022-06-24
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. 运行截图

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

    5. 后记

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

    【案例】进制转换程序(界面)_十六进制_04

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


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

  • 上一篇:第一章:用Pythonic方式来思考(Ⅰ)
    下一篇:没有了
    网友评论