Запись текста в entry поочерёдно
Как можно реализовать записи в следуюший entry ? Пытался реализовать таким образом но у меня не вышло Вот код
from pathlib import Path
from tkinter import Tk, Canvas, Entry, Text, Button, PhotoImage
OUTPUT_PATH = Path(__file__).parent
ASSETS_PATH = OUTPUT_PATH / Path("./assets")
def relative_to_assets(path: str) -> Path:
return ASSETS_PATH / Path(path)
i = 1
entry_list = ["entry_1", "entry_2", "entry_3", "entry_4", "entry_5", "entry_6", "entry_7", "entry_8", "entry_9", "entry_10" ]
window = Tk()
window.geometry("455x606")
window.configure(bg = "#FFFFFF")
canvas = Canvas(
window,
bg = "#FFFFFF",
height = 606,
width = 455,
bd = 0,
highlightthickness = 0,
relief = "ridge"
)
canvas.place(x = 0, y = 0)
entry_image_1 = PhotoImage(
file=relative_to_assets("entry_1.png"))
entry_bg_1 = canvas.create_image(
217.5,
31.5,
image=entry_image_1
)
entry_1 = Entry(
bd=0,
bg="#F4BDBD",
highlightthickness=0
)
entry_1.place(
x=10.0,
y=14.0,
width=415.0,
height=33.0
)
entry_image_2 = PhotoImage(
file=relative_to_assets("entry_2.png"))
entry_bg_2 = canvas.create_image(
217.5,
78.5,
image=entry_image_2
)
entry_2 = Entry(
bd=0,
bg="#CCE9BB",
highlightthickness=0
)
entry_2.place(
x=10.0,
y=61.0,
width=415.0,
height=33.0
)
entry_image_3 = PhotoImage(
file=relative_to_assets("entry_3.png"))
entry_bg_3 = canvas.create_image(
217.5,
125.5,
image=entry_image_3
)
entry_3 = Entry(
bd=0,
bg="#C6ECE6",
highlightthickness=0
)
entry_3.place(
x=10.0,
y=108.0,
width=415.0,
height=33.0
)
entry_image_4 = PhotoImage(
file=relative_to_assets("entry_4.png"))
entry_bg_4 = canvas.create_image(
217.5,
172.5,
image=entry_image_4
)
entry_4 = Entry(
bd=0,
bg="#E6E0AE",
highlightthickness=0
)
entry_4.place(
x=10.0,
y=155.0,
width=415.0,
height=33.0
)
entry_image_5 = PhotoImage(
file=relative_to_assets("entry_5.png"))
entry_bg_5 = canvas.create_image(
217.5,
219.5,
image=entry_image_5
)
entry_5 = Entry(
bd=0,
bg="#E19ADA",
highlightthickness=0
)
entry_5.place(
x=10.0,
y=202.0,
width=415.0,
height=33.0
)
entry_image_6 = PhotoImage(
file=relative_to_assets("entry_6.png"))
entry_bg_6 = canvas.create_image(
217.5,
266.5,
image=entry_image_6
)
entry_6 = Entry(
bd=0,
bg="#9185DD",
highlightthickness=0
)
entry_6.place(
x=10.0,
y=249.0,
width=415.0,
height=33.0
)
entry_image_7 = PhotoImage(
file=relative_to_assets("entry_7.png"))
entry_bg_7 = canvas.create_image(
217.5,
313.5,
image=entry_image_7
)
entry_7 = Entry(
bd=0,
bg="#33D356",
highlightthickness=0
)
entry_7.place(
x=10.0,
y=296.0,
width=415.0,
height=33.0
)
entry_image_8 = PhotoImage(
file=relative_to_assets("entry_8.png"))
entry_bg_8 = canvas.create_image(
217.5,
360.5,
image=entry_image_8
)
entry_8 = Entry(
bd=0,
bg="#980CEE",
highlightthickness=0
)
entry_8.place(
x=10.0,
y=343.0,
width=415.0,
height=33.0
)
entry_image_9 = PhotoImage(
file=relative_to_assets("entry_9.png"))
entry_bg_9 = canvas.create_image(
217.5,
407.5,
image=entry_image_9
)
entry_9 = Entry(
bd=0,
bg="#E42956",
highlightthickness=0
)
entry_9.place(
x=10.0,
y=390.0,
width=415.0,
height=33.0
)
entry_image_10 = PhotoImage(
file=relative_to_assets("entry_10.png"))
entry_bg_10 = canvas.create_image(
217.5,
454.5,
image=entry_image_10
)
entry_10 = Entry(
bd=0,
bg="#B8F118",
highlightthickness=0
)
entry_10.place(
x=10.0,
y=437.0,
width=415.0,
height=33.0
)
button_image_1 = PhotoImage(
file=relative_to_assets("button_1.png"))
button_1 = Button(
image=button_image_1,
borderwidth=0,
highlightthickness=0,
command=lambda: button(),
relief="flat"
)
button_1.place(
x=10.0,
y=484.0,
width=415.0,
height=57.0
)
def button ():
global i
current_entry = entry_list[i]
print(current_entry)
current_entry.insert(0, "test")
print("filled entry_" + i )
i = i + 1
window.resizable(False, False)
window.mainloop()
Ответы (1 шт):
Автор решения: GrAnd
→ Ссылка
Как вариант, ссылки на созданные entry хранить в списке.
И вообще, для повторения однотипных действий давно придуманы циклы.
from pathlib import Path
from tkinter import Tk, Canvas, Entry, Text, Button, PhotoImage
OUTPUT_PATH = Path(__file__).parent
ASSETS_PATH = OUTPUT_PATH / Path("./assets")
def relative_to_assets(path: str) -> Path:
return ASSETS_PATH / Path(path)
i = 0
def button():
global i
if i < entries_count:
entries[i].insert(0, f"test {i}")
print(f"filled entry_{i}")
i += 1
entry_colors = ["#F4BDBD", "#CCE9BB", "#C6ECE6", "#E6E0AE",
"#E19ADA", "#9185DD", "#33D356", "#980CEE",
"#E42956", "#B8F118"]
entries_count = len(entry_colors) # 10
entry_images = []
entries = []
window = Tk()
window.geometry("455x606")
window.configure(bg = "#FFFFFF")
canvas = Canvas(
window,
bg = "#FFFFFF",
height = 606,
width = 455,
bd = 0,
highlightthickness = 0,
relief = "ridge"
)
canvas.place(x = 0, y = 0)
for idx in range(entries_count):
entry_images.append(
PhotoImage(file=relative_to_assets(f"entry_{idx+1}.png"))
)
canvas.create_image(
217.5,
31.5 + idx*47,
image=entry_images[-1]
)
entries.append(
Entry(
bd=0,
bg=entry_colors[idx],
highlightthickness=0
)
)
entries[-1].place(
x=10.0,
y=14 + idx*47,
width=415.0,
height=33.0
)
button_image_1 = PhotoImage(
file=relative_to_assets("button_1.png"))
button_1 = Button(
image=button_image_1,
borderwidth=0,
highlightthickness=0,
command=button,
relief="flat"
)
button_1.place(
x=10.0,
y=14 + entries_count*47,
width=415.0,
height=57.0
)
window.resizable(False, False)
window.mainloop()