[英]How do I get an entry widget to save what I input? Python Tkinter
我想制作一個輸入個人詳細信息的條目小部件,但是我想將這些詳細信息保存為變量,以便我可以將它們寫入 txt 文件中。
from tkinter import *
root = Tk()
Label(root, text = "Childs First name").grid(row = 0, sticky = W)
Label(root, text = "Childs Surname").grid(row = 1, sticky = W)
Label(root, text = "Childs Year of Birth").grid(row = 2, sticky = W)
Label(root, text = "Childs Month of Birth").grid(row = 3, sticky = W)
Label(root, text = "Childs Day of Birth").grid(row = 4, sticky = W)
Fname = Entry(root)
Sname = Entry(root)
x = Entry(root)
y = Entry(root)
z = Entry(root)
Fname.grid(row = 0, column = 1)
Sname.grid(row = 1, column = 1)
x.grid(row = 3, column = 1)
y.grid(row = 2, column = 1)
z.grid(row = 4, column = 1)
Fname = Fname.get
Sname = Sname.get
x = x.get
y = y.get
z = z.get
mainloop()
我的代碼工作得很好,但是它沒有保存我輸入的內容,更不用說將其保存在變量中了。 我顯然缺少大量代碼,但我不知道是什么代碼。
PS:另外,如果不是太多,我如何制作一個按鈕來繼續下一行代碼?
這還沒有得到回答,所以這里有一個完整的代碼塊,可以滿足您的要求。
from tkinter import *
root = Tk()
Label(root, text = "Childs First name").grid(row = 0, sticky = W)
Label(root, text = "Childs Surname").grid(row = 1, sticky = W)
Label(root, text = "Childs Year of Birth").grid(row = 2, sticky = W)
Label(root, text = "Childs Month of Birth").grid(row = 3, sticky = W)
Label(root, text = "Childs Day of Birth").grid(row = 4, sticky = W)
Fname = Entry(root)
Sname = Entry(root)
x = Entry(root)
y = Entry(root)
z = Entry(root)
Fname.grid(row = 0, column = 1)
Sname.grid(row = 1, column = 1)
x.grid(row = 3, column = 1)
y.grid(row = 2, column = 1)
z.grid(row = 4, column = 1)
def getInput():
a = Fname.get()
b = Sname.get()
c = x.get()
d = y.get()
e = z.get()
root.destroy()
global params
params = [a,b,c,d,e]
Button(root, text = "submit",
command = getInput).grid(row = 5, sticky = W)
mainloop()
它不是很優雅,但它完全符合您的要求,對您的版本進行了最少的更改。
如果您運行它,並在您的輸入字段中輸入1
、 2
、 3
、 4
和5
,然后單擊我添加的submit
按鈕,並打印params
list
,您將得到:
>>> params
['1', '2', '4', '3', '5']
如果由於某種原因您不希望窗口在提交后關閉,請省略root.destroy()
並從那里獲取它。
請注意,作為Button
參數的getInput
沒有括號,因此它僅在單擊按鈕時調用,而不是在執行此行時調用。
最后,我不確定您的最后一個問題是什么意思,“我將如何制作一個按鈕以繼續執行下一行代碼”。 最后添加的mainloop()
確保(除其他外)在框關閉之前不會執行其余代碼(它還啟動一個循環收集事件並確保事件得到處理)。 所以一旦你點擊submit
並且窗口關閉,剩下的代碼就會被執行。 如果在mainloop()
行之前或之后添加print('hi')
語句,您將進一步理解這一點。 如果您之前添加它,該字符串將在窗口打開時“同時”打印; 如果你把它放在后面,一旦窗口關閉,它就會被打印出來。 (有關mainloop()
其他信息,請在此處和此處查看堆棧中的廣泛討論)
為了在 tkinter 中接受用戶的輸入,我總是使用以下代碼,結果萬無一失 -
from tkinter import *
root=Tk()
Label(root,text='Your input prompt').pack()
t1=Text(root, height=2, width=8)
t1.pack()
現在這是主要部分:
def value(t):
x=t.get('1.0','end-1c')
return x
顯然,您需要在文本框中輸入值后觸發此操作,大概是通過使用顯示“提交”或“確認”或其他內容的按鈕來觸發的。
def submit():
a=value(t1)
print(a)
Button(root, text='Submit', command=submit).pack()
一些注意事項:
希望你覺得這很有用
條目小部件有一個get
方法,可用於在需要時獲取值。 您的“保存”函數只需要在寫入文件之前調用此函數即可。
例如:
def save():
x_value = x.get()
y_value = y.get()
z_value = z.get()
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.