[英]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.