转换为GUI

时间:2017-09-21 10:18:16

标签: python python-3.x tkinter

我正在运行一个基本的hex2dec转换器,并希望将其从控制台转换为GUI。

现在程序在控制台中工作正常,但在我转换为GUI之后,它似乎抛弃了 int()无法使用显式基础转换非字符串 < / strong>错误。

这是GUI代码

from tkinter import *

root = Tk()
root.geometry("400x400+250+250")
root.title("Hex Converter")

heading = Label(root, text="Simple Hex to Decimal Converter", font=('arial 15 bold'), fg="steelblue").pack()

entr_hex_val = Label(root, text="Enter Hex Value to Convert", font=('arial 13 bold')).place(x=10, y=50)

my_num = IntVar()
ent_box = Entry(root, width=50, textvariable=my_num).place(x=10, y=90)

def converter():
    hexdec = my_num.get()
    dec = int(hexdec, 16)
    lab = Label(root, text=("decimal value = "+ str(dec)), font=('arial 25 bold'), fg="red").place(x=10, y=200)

conv = Button(root, text="Convert", width=12, height=2, bg="lightgreen", command=converter).place(x=10, y=130)

root.mainloop()

和控制台代码

import os

def hexconverter:
    os.system('cls')
    hexdec = input("Enter number in Hexadecimal Format: ")
    dec = int(hexdec, 16)
    print(str(dec))

hexconverter()

我很难理解为什么相同的代码在控制台中工作但在GUI中却不能。

2 个答案:

答案 0 :(得分:1)

十六进制数必须是一个字符串,并且您将my_num定义为整数。将my_num = IntVar()更改为my_num = StringVar()应该可以解决问题。

答案 1 :(得分:1)

当您在.get()上使用IntVar时,它会返回一个整数,并且指定基础的int转换对字符串起作用,如错误消息中所述。

您可以在使用之前将值转换为字符串。

dec = int(str(hexdec), 16)

但是,由于您使用的是十六进制值,因此如果在使用IntVar时看到任何非整数值,则您的条目可能会获得字符AF并且.get()会引发错误,因此您将更容易使用StringVar并使用try-except来捕获转化错误。

另一点是,您的代码会在每次点击时重新创建标签,lab将始终具有值None。重新创建可能会导致一些内存问题(好吧,也许不是在这个小问题中,但仍然值得注意)。您可以在全局范围内创建一次,而不是每次都创建标签,然后在需要时更改其值。

my_num = StringVar()  

lab = Label(root, text="", font='arial 25 bold', fg="red")
lab.place(x=10, y=200) #also notice seperated the place line to avoid NoneType error

def converter():
    hexdec = my_num.get()
    try:
        dec = int(hexdec, 16)
        lab["text"] = "decimal value = "+ str(dec)
    except ValueError:
        lab["text"] = "Error, please enter valid hex value"