简体   繁体   English

无法使用 Tkinter 中的输入框将字符串转换为整数

[英]Can't convert string to integer using Entry boxes in Tkinter

i'm new to tkinter and python in general and i'm having an issue that i can't solve.我是 tkinter 和 python 的新手,我遇到了一个无法解决的问题。 In my program i want to take input from the user and transform it into an integer to use that variable later on.在我的程序中,我想从用户那里获取输入并将其转换为一个整数,以便稍后使用该变量。 The main issue is that i get the error invalid literal for int() with base 10: ''.主要问题是,我得到了底数为 10 的 int() 错误无效文字:''。 I tried different methods by searching online but none of them did work.我通过网上搜索尝试了不同的方法,但都没有奏效。 Any help is well appreciated.任何帮助都非常感谢。 Thank you!谢谢! error message on visual studio Visual Studio 上的错误消息

My code:我的代码:

from tkinter import *
import tkinter as tk
window = Tk()

window.title("Controlla quote")
window.geometry('400x150')

#binari
binari_num=0
def binari(number):
    if number==1:
        binari_num=1
        print("binari= ",binari_num)
    elif number==2:
        binari_num=2
        print("binari= ",binari_num)
    else:
        pass
    return binari_num
#radiobuttons
info = IntVar()
binari_1 = Radiobutton(window, text="1", command=lambda:binari(info.get()),variable=info,value=1).grid(column=1, row=0)
binari_2 = Radiobutton(window, text="2", command=lambda:binari(info.get()),variable=info,value=2).grid(column=2, row=0)
#binari label
binari_scritta=Label(window, text="Binari:").grid(column=0, row=0, stick=W)

#stazionamenti
stazionamenti_label=Label(window, text="Stazionamenti: ").grid(column=0, row=1, stick=W)
stazionamenti_entry=Entry(window)
stazionamenti_entry.grid(column=1, row=1, stick=W)
#conversion stazionamenti
stazionamenti_str= stazionamenti_entry.get()
stazionamenti_num= int(stazionamenti_str)


#avanti
def avanti():
    pass
avanti_btn=Button(window, text="Avanti", command=avanti()).grid(columnspan=50, stick=E)

window.mainloop()

The problem is that the code gets executed right away and when stazionamenti_entry.get() is called, its basically an empty string "" .问题是代码会立即执行,当stazionamenti_entry.get()被调用时,它基本上是一个空字符串"" int() requires a valid string which contains only numbers and a minus sign at first place optionally. int()需要一个有效的字符串,它只包含数字和一个可选的减号。 Strings with spaces or empty string or with non numerical characters give this error.带有空格或空字符串或带有非数字字符的字符串会出现此错误。

The error means "the string provided is not convertable to int".错误意味着“提供的字符串不可转换为 int”。

What you can do is make a function and call it when stazionamenti_entry.get() is needed and make sure there is numeral data in stazionamenti_entry .您可以做的是创建一个函数并在需要stazionamenti_entry.get()时调用它,并确保stazionamenti_entry有数字数据。 More precisely you should do it in you avanti function.更准确地说,你应该在你的avanti函数中做到这avanti

You can add in some checks before stazionamenti_num= int(stazionamenti_str) like:您可以在stazionamenti_num= int(stazionamenti_str)之前添加一些检查,例如:

if stazionamenti_str :
    stazionamenti_num= int(stazionamenti_str)

This will make sure that string is not empty.这将确保字符串不为空。

On OPs request:根据 OP 要求:

.
.
.
stazionamenti_label=Label(window, text="Stazionamenti: ").grid(column=0, row=1, stick=W)
stazionamenti_entry=Entry(window)
stazionamenti_entry.grid(column=1, row=1, stick=W)
#conversion stazionamenti


def helper():
    global stazionamenti_num
    global stazionamenti_entry
    if stazionamenti_entry.get():
        stazionamenti_num = int(stazionamenti_entry.get())
#avanti
def avanti():
    helper()
    print(stazionamenti_num)

avanti_btn=Button(window, text="Avanti", command=avanti).grid(columnspan=50, stick=E)
window.mainloop()

Can you try你能试一下吗

binari_1 = Radiobutton(window, text="1", command=lambda:binari(int(info.get())),variable=info,value=1).grid(column=1, row=0)

binari_2 = Radiobutton(window, text="2", command=lambda:binari(int(info.get())),variable=info,value=2).grid(column=2, row=0)

I think the IntVar() seems to have a different approach or object being returned.我认为IntVar()似乎有不同的方法或返回的对象。 Try converting it using int() function尝试使用int()函数转换它

I ended with this.我就这样结束了。 But if i print(stazionamenti_num) it does not print it @abdullahQureshee但是如果我打印(stazionamenti_num)它不会打印它@abdullahQureshee

#stazionamenti
stazionamenti_label=Label(window, text="Stazionamenti: ").grid(column=0, row=1, stick=W)
stazionamenti_entry=Entry(window)
stazionamenti_entry.grid(column=1, row=1, stick=W)
#conversion stazionamenti
global stazionamenti_str
global stazionamenti_num
stazionamenti_str=""
def stazionamenti_convert():
    stazionamenti_num= int(stazionamenti_str)


#avanti
def avanti():
    if stazionamenti_str:
        stazionamenti_convert()
avanti_btn=Button(window, text="Avanti", command=avanti()).grid(columnspan=50, stick=E)
window.mainloop()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM