我一整天都在試圖解決這個荒謬的問題,但沒有成功;在這個論壇上有很多材料,但通常它們是大量的代碼,我無法理解發生了什么。在互聯網上,他們通常建議鑄造,但它不起作用。為了讓事情變得簡單,我寫了一個示例代碼來說明我在更大的代碼中遇到的問題
import tkinter as tk
from tkinter import *
#from tkinter import ttk
my_window = tk.Tk()
my_label = tk.Label(master=my_window,text="N")
my_label.pack()
my_entry = tk.Entry(master=my_window)
my_entry.pack()
N = my_entry.get()
print(float(N))
my_window.mainloop()
非常好和簡單,但我收到以下訊息
ValueError: could not convert string to float: ''
我嘗試了很多可能性,但一切都奏效了。非常感謝任何小建議。謝謝
uj5u.com熱心網友回復:
來自:https : //www.geeksforgeeks.org/python-tkinter-entry-widget/
“get() :以字串形式回傳條目的當前文本。”
我認為你不能只是將字串轉換為浮點數。
uj5u.com熱心網友回復:
GUI 編程是事件驅動的,這意味著您必須根據觸發的事件進行編碼。每個python代碼從上到下運行,在這種情況下,所有從上到下的代碼,外部函式,都被執行。這意味著只要:
my_entry = tk.Entry(master=my_window)
my_entry.pack()
...被執行,要執行的下一行是N = my_entry.get(),并且在執行時,條目小部件內沒有任何內容,因此N變為空字串,然后您嘗試將該空字串轉換為浮點數,這顯然會給出錯誤。
你應該做的是,制作一個按鈕,當你點擊它時(事件被觸發)并將其連接到一個函式,該函式將獲取輸入并轉換為浮動。這樣當您單擊按鈕時,您已經在條目中輸入了一些內容,現在它不再是空的。
import tkinter as tk
from tkinter import *
my_window = tk.Tk()
def cast():
N = my_entry.get()
try: # Try to execute this
print(float(N))
except ValueError: # If ValueError(meaning it is not a float) is triggered then print...
print('Not a number!')
my_label = tk.Label(master=my_window,text="N")
my_label.pack()
my_entry = tk.Entry(master=my_window)
my_entry.pack()
# N = my_entry.get() N will be empty as my_entry is empty when code is executed
Button(my_window,text='Click me to convert to float',command=cast).pack() # A button to trigger event
my_window.mainloop()
另一種方式,也是一種不受歡迎的方式,是為您使用DoubleVar()which willget()文本,在這種情況下,您的條目將接受任何值,但是當您get()從 中獲取值時,如果它不是浮點數DoubleVar(),它將引發 a TclError。
def cast():
# Unlike before, error will be generated at get() and you dont need float()
# because if there is no error then it is guaranteed to be a float anyway
try:
N = var.get()
print(N)
except TclError: # If TclError is triggered then print...
print('Not a number!')
var = DoubleVar() # tkinter control variable
my_entry = tk.Entry(master=my_window,textvariable=var)
my_entry.pack()
注意:您可以這樣做my_entry.get()并且即使輸入不是浮點數也不會出現任何錯誤,錯誤僅在var.get().
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/403625.html
標籤:
