簡體   English   中英

如何獲取條目小部件以保存我輸入的內容? Python Tkinter

[英]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()

它不是很優雅,但它完全符合您的要求,對您的版本進行了最少的更改。

如果您運行它,並在您的輸入字段中輸入12345 ,然后單擊我添加的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()

一些注意事項:

  1. 文本小部件中的高度和寬度是可選的。
  2. 請注意,小部件是 TEXT,而不是 ENTRY。 我還沒有看到代碼與條目一起工作。
  3. get "end-1c" 中的值是刪除 tkinter 自己添加的額外換行符。
  4. 您顯然可以使用 grid 代替 pack()。

希望你覺得這很有用

條目小部件有一個get方法,可用於在需要時獲取值。 您的“保存”函數只需要在寫入文件之前調用此函數即可。

例如:

def save():
    x_value = x.get()
    y_value = y.get()
    z_value = z.get()
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM