from tkinter import *
root = Tk()
root.title('sorter')
# funktion for new entry sorter
number = 0
entry_information_list = []
def new_entry():
global number
global entry_information_list
number = 1
# number
number_of_name = Label(root, text=number, width=20)
number_of_name.grid(row=number, column=0)
#entry feeld
new_entry = Entry(root, borderwidth=3, width=100)
new_entry.grid(row=number, column=1, columnspan=4)
entry_information_list.append(new_entry.get())
print(entry_information_list)
#buttons
number_for_list = Button(root, text='Sort by number', borderwidth=3, width=20)
button_for_1_name = Button(root, text='Sort by first name', borderwidth=3, width=20)
button_for_2_name = Button(root, text='Sort by second name', borderwidth=3, width=20)
button_for_3_name = Button(root, text='Sort by third name', borderwidth=3, width=20)
new_entry_button = Button(root, text='New entry', borderwidth=3, command=new_entry, width=20)
#position and description of buttons
number_for_list.grid(row=0, column=0)
button_for_1_name.grid(row=0, column=1)
button_for_2_name.grid(row=0, column=2)
button_for_3_name.grid(row=0, column=3)
new_entry_button.grid(row=0, column=4)
root.mainloop()
當我嘗試從控制臺查看串列中的資訊時,它顯示它充滿了空元素。我錯過了一條線還是我使用了完全不同的結構?
uj5u.com熱心網友回復:
解決此問題的方法之一是將新創建的條目系結到例如輸入鍵(回傳鍵)并具有一個函式,該函式將從該條目中獲取資料并將其附加到串列中:
from tkinter import Tk, Label, Button, Entry
root = Tk()
root.title('sorter')
# function for new entry sorter
number = 0
entry_information_list = []
def append_data(event=None):
data = event.widget.get()
entry_information_list.append(data)
print(entry_information_list)
def new_entry():
global number
number = 1
# number
number_of_name = Label(root, text=number, width=20)
number_of_name.grid(row=number, column=0)
# entry field
entry = Entry(root, borderwidth=3, width=100)
entry.grid(row=number, column=1, columnspan=4)
entry.bind('<Return>', append_data)
# buttons
number_for_list = Button(root, text='Sort by number', borderwidth=3, width=20)
button_for_1_name = Button(root, text='Sort by first name', borderwidth=3, width=20)
button_for_2_name = Button(root, text='Sort by second name', borderwidth=3, width=20)
button_for_3_name = Button(root, text='Sort by third name', borderwidth=3, width=20)
new_entry_button = Button(root, text='New entry', borderwidth=3, command=new_entry, width=20)
# position and description of buttons
number_for_list.grid(row=0, column=0)
button_for_1_name.grid(row=0, column=1)
button_for_2_name.grid(row=0, column=2)
button_for_3_name.grid(row=0, column=3)
new_entry_button.grid(row=0, column=4)
root.mainloop()
一些缺點是,如果多次按下回傳鍵,相同的值將被附加兩次,因此可能使用集合或字典或索引來替換以前的值。然后你也必須每次按回車鍵并進入正確的條目。但否則至少你明白了:你需要一個事件來從條目中獲取資料,否則就像你的情況一樣,它幾乎立即發生,而不會給用戶輸入任何資料的機會。
uj5u.com熱心網友回復:
問題是這一行:
entry_information_list.append(new_entry.get())
您new_entry.get()在創建條目小部件后大約一毫秒呼叫,遠在用戶看到小部件之前,很少有時間輸入它。
相反,您應該附加小部件本身:
entry_information_list.append(new_entry)
稍后,當您準備好處理資料時,一個簡單的串列推導式將從所有小部件中獲取所有資料:
data = [widget.get() for widget in entry_information_list]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/340150.html
上一篇:將滾動文本向右對齊
