我正在运行一个基本的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中却不能。
答案 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"