Итак, я изучал модуль ctk и зашел в тупик, я так долго искал это, но не нашел awnser вот мой вопрос: как я могу прикрепить кнопку поиска к записи и сделать другие вещи лучше, мой код:
from customtkinter import *
from PIL import Image
from PyDictionary import PyDictionary
import pyttsx3
from tkinter import messagebox
audio_dictionary = CTk()
engine = pyttsx3.init()
info_lbl = CTkLabel(audio_dictionary, text = " TajDictionary", font=("Agency FB", 60))
info_lbl.grid(column=0, row=0)
entry = CTkEntry(audio_dictionary, placeholder_text = "Write the word: ", border_color = "#1F6AA5", width=300, height=35)
entry.grid(column=0, row=1)
def search():
if ' ' in entry.get():
if entry.get()[-1] == ' ':
text_box.delete(1.0, END)
result = PyDictionary().meaning(entry.get())
text_box.insert(1.0, f"{entry.get()}: {result}")
else:
messagebox.showerror("ERROR", "Only one letter")
elif any(char.isdigit() for char in entry.get()):
messagebox.showerror("ERROR", "Only letters")
elif entry.get() == "" or entry.get() == " ":
messagebox.showerror("ERROR", "The box is empty")
else:
text_box.delete(1.0, END)
result = PyDictionary().meaning(entry.get())
text_box.insert(1.0, f"{entry.get()}: {result}")
img1 = Image.open("search_magnifier.png")
search_btn = CTkButton(audio_dictionary, text = "", width=30, height=35, image=CTkImage(dark_image=img1), command=search)
search_btn.grid(column=1, row=1)
def speech():
engine.say(entry.get())
engine.runAndWait()
img2 = Image.open("speaker.png")
audio_btn = CTkButton(audio_dictionary, text = "", image=CTkImage(dark_image=img2), width=10, height=35, command=speech)
audio_btn.grid(column=0, row=2)
def clear():
entry.delete(0, END)
clear = CTkButton(audio_dictionary, text = "Clear", command=clear, text_color = "black")
clear.grid(column=1, row=2)
text_box = CTkTextbox(audio_dictionary, width=400, height=300, font=("arial", 20))
text_box.grid(column=0, row=3)
audio_dictionary.mainloop()
Я попробовал сетки, стороны упаковки, Пэди, но не получил удовлетворительного результата
Чтобы сделать ваше приложение более понятным и организованным, вам следует использовать фреймы.
Фрейм — это виджет, содержащий другие виджеты.
Итак, в вашем случае вы можете поместить кнопку поиска и запись в один и тот же фрейм, чтобы они оставались вместе, а затем упаковать/сетку/поместить фрейм в окно.
Вот пример того, как работает фрейм:
from customtkinter import *
window = CTk()
window.geometry("300x300")
frame = CTkFrame(window)
entry_in_frame = CTkEntry(frame)
entry_in_frame.pack(side = "right")
button_in_frame = CTkButton(frame, text = "I'm in the frame")
button_in_frame.pack(side = "left")
frame.pack(side = "top")
button_not_in_frame = CTkButton(window, text = "I'm not in the frame")
button_not_in_frame.pack(side = "bottom")
window.mainloop()
В этом примере я создал фрейм, содержащий запись, кнопку и еще одну кнопку, находящуюся вне фрейма.
Рамки имеют другой цвет фона, если вы хотите сделать его таким же, как фон окна, вы можете изменить строку создания рамки на frame = CTkFrame(window, fg_color = "transparent")
Если вам нужна дополнительная информация о фреймах, проверьте документацию по адресу https://customtkinter.tomschimansky.com/documentation/widgets/frame или добавьте комментарий к моему ответу.
Надеюсь, я вам помог, хорошего дня.
сначала была путаница, но после нескольких попыток все получилось, большое спасибо
Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой и указать достаточно подробностей, чтобы найти адекватный ответ.