簡體   English   中英

無法使用 Tkinter 中的輸入框將字符串轉換為整數

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

我是 tkinter 和 python 的新手,我遇到了一個無法解決的問題。 在我的程序中,我想從用戶那里獲取輸入並將其轉換為一個整數,以便稍后使用該變量。 主要問題是,我得到了底數為 10 的 int() 錯誤無效文字:''。 我通過網上搜索嘗試了不同的方法,但都沒有奏效。 任何幫助都非常感謝。 謝謝! Visual Studio 上的錯誤消息

我的代碼:

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

問題是代碼會立即執行,當stazionamenti_entry.get()被調用時,它基本上是一個空字符串"" int()需要一個有效的字符串,它只包含數字和一個可選的減號。 帶有空格或空字符串或帶有非數字字符的字符串會出現此錯誤。

錯誤意味着“提供的字符串不可轉換為 int”。

您可以做的是創建一個函數並在需要stazionamenti_entry.get()時調用它,並確保stazionamenti_entry有數字數據。 更准確地說,你應該在你的avanti函數中做到這avanti

您可以在stazionamenti_num= int(stazionamenti_str)之前添加一些檢查,例如:

if stazionamenti_str :
    stazionamenti_num= int(stazionamenti_str)

這將確保字符串不為空。

根據 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()

你能試一下嗎

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)

我認為IntVar()似乎有不同的方法或返回的對象。 嘗試使用int()函數轉換它

我就這樣結束了。 但是如果我打印(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