datagridview 绑定list 不能刷新界面_【案例】进制转换(界面)

84372f84b004bd5d3f72c6480507e023.png

案例介绍

由于网络原理以及单片机课程的需要,我要处理许多关于二进制十进制十六进制之间转换的问题,所以编写了一个小软件来替我完成这些工作。

用户只需要输入数字,选择相对应的进制,然后按下转换按钮,即可在输出框中看到其余另外两个进制的转换结果。

 # 输入 
 1011
 # 进制选择
 Binary
 ​
 # 输出
 Decimal: 11
 Hexadecimal: B

准备工作

  • Python3.x

界面模块

界面包括了四个部分内容:接受用户输入、用户选择进制、输出转换结果、开启按钮。

采用 tkinter 中的 grid 布局模式。

算法核心

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

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

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

二进制转换过程

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()
 ​

运行截图

4bcacada72e1ce18cad00b749a35a716.png
二进制转换十进制、十六进制

ef8d82a8b543f9fa7b36bac5d4f09f7a.png
十进制转换为二进制、十六进制

37cf55e678d4e3a1b1401b03d84eebda.png
十六进制转换为二进制、十进制

后记

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

e7f338027f9f38e41c164a84c0540fef.gif

欢迎关注我的 CSDN 博客,里面有更多关于 python 的精彩知识分享哦~

CSDN-专业IT技术社区-登录​jiaming.blog.csdn.net

参考

  1. ^本软件受到著作权保护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值