我如何在 tkinter 和 ctk 中使用网格和布局

问题描述 投票:0回答:1

所以我正在学习 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()

我尝试了网格、包装侧面、稻草,但没有得到任何令人满意的结果

python python-3.x tkinter tk-toolkit customtkinter
1个回答
0
投票

为了使您的应用程序更加清晰和有组织,您应该使用框架。

框架是包含其他小部件的小部件。

因此,在您的情况下,您可以将搜索按钮和条目放在同一框架中,以便它们保持在一起,然后打包/网格/将框架放置到窗口中。

以下是框架如何工作的示例:

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或在我的答案中添加评论。

希望我能帮到你,祝你有美好的一天。

© www.soinside.com 2019 - 2024. All rights reserved.