如何在自定义的tkinter中添加菜单栏

5

我如何在自定义的TKinter窗口中添加菜单栏?

我想在我的自定义TKinter窗口中添加一个菜单栏。


你可以跟着这个链接学习:https://www.pythontutorial.net/tkinter/tkinter-menu/ - Rashmi Shehana
你的窗口代码是什么,为什么你认为它没有添加菜单栏? - Iuri Guilherme
我不会使用标准的tkinter,因为我想要黑色背景和更加自定义的标题栏等。 - Aavez siddiqui
1
请在提问时解释您尝试过什么以及遇到了什么问题。否则会显得像“请帮我写代码”。 - Gert Arnold
2个回答

1

CustomTkinter 目前并没有改变菜单栏的外观,它仍然非常基础。许多 GUI 工具包正在避免传统菜单,转而使用完全可定制的用户界面。

enter image description here

您最好的选择可能是使用CTk小部件自行构建,例如CTkOptionMenuCTkComboBox

enter image description here

从可用性和可访问性的角度来看,使用传统的菜单系统有其优势。

import customtkinter

customtkinter.set_appearance_mode("light")  
customtkinter.set_default_color_theme("dark-blue")

app = customtkinter.CTk()
app.title("CustomTkinter Sample Menu Bar.py")

def button_callback():
    print("Button click", combobox_1.get())

def change_appearance_mode_event(new_appearance_mode: str):
    customtkinter.set_appearance_mode(new_appearance_mode)

def change_scaling_event(new_scaling: str):
    new_scaling_float = int(new_scaling.replace("%", "")) / 100
    customtkinter.set_widget_scaling(new_scaling_float)


frame_1 = customtkinter.CTkFrame(master=app)
frame_1.grid(row=0, pady=10, padx=0)

optionmenu_1 = customtkinter.CTkOptionMenu(frame_1, values=["Option 1", "Option 2", "Option 42 long long long..."])
optionmenu_1.grid(row=0, column=0, pady=10, padx=10)
optionmenu_1.set("CTk Option Menu")

combobox_1 = customtkinter.CTkComboBox(frame_1, values=["Option 1", "Option 2", "Option 42 long long long..."])
combobox_1.grid(row=0, column=1, pady=10, padx=0)
combobox_1.set("CTk Combo Box")

appearance_mode_optionemenu = customtkinter.CTkOptionMenu(frame_1, values=["Light", "Dark", "System"], command=change_appearance_mode_event)
appearance_mode_optionemenu.grid(row=0, column=2, padx=0, pady=10)

scaling_optionemenu = customtkinter.CTkOptionMenu(frame_1, values=["80%", "90%", "100%", "110%", "120%"], command=change_scaling_event)
scaling_optionemenu.grid(row=0, column=3, padx=0, pady=10)

text_1 = customtkinter.CTkTextbox(master=frame_1, width=600, height=70)
text_1.grid(row=1, column=0, columnspan=4, pady=10, padx=10)
text_1.insert("0.0", "Lorem Ipsum adalah contoh teks atau dummy dalam industri percetakan dan penataan huruf atau typesetting. Lorem Ipsum telah menjadi standar contoh teks sejak tahun 1500an, saat seorang tukang cetak yang tidak dikenal mengambil sebuah kumpulan teks dan mengacaknya untuk menjadi sebuah buku contoh huruf. Ia tidak hanya bertahan selama 5 abad, tapi juga telah beralih ke penataan huruf elektronik, tanpa ada perubahan apapun. Ia mulai dipopulerkan pada tahun 1960 dengan diluncurkannya lembaran-lembaran Letraset yang menggunakan kalimat-kalimat dari Lorem Ipsum, dan seiring munculnya perangkat lunak Desktop Publishing seperti Aldus PageMaker juga memiliki versi Lorem Ipsum.")

app.mainloop()

0

我不确定在CTK中是否有内置的菜单栏选项,但你可以在其中使用Tkinter菜单栏并根据你的设计进行自定义。例如: 输入图像描述

# Menu Bar
        menu_bar = tk.Menu(self)
        m1 = tk.Menu(menu_bar, tearoff=0)
        m1.add_command(label="Open File",command=self.open_file)
        m1.add_separator()
        m1.add_command(label="Save File",command=lambda : self.save_final(0))
        self.config(menu=menu_bar)

        menu_bar.add_cascade(label="File",menu=m1)
        m2 = tk.Menu(menu_bar, tearoff=0)
        m2.add_command(label="Light theme",command=lambda : self.theme_selection(0))
        m2.add_command(label="Dark theme",command=lambda : self.theme_selection(1))
        m2.add_separator()
        m2.add_command(label="System theme",command=lambda : self.theme_selection(2))
        self.config(menu=menu_bar)
        menu_bar.add_cascade(label="Setting",menu=m2)
        
        m3 = tk.Menu(menu_bar, tearoff=0)
        m3.add_command(label="help!",command=lambda : self.help_us())

        self.config(menu=menu_bar)
        menu_bar.add_cascade(label="Help",menu=m3)
        
        
        # configure grid layout (4x4)
        # self.grid_columnconfigure(0, weight=1)
        self.grid_columnconfigure(1, weight=1)
        self.grid_columnconfigure((2, 3), weight=1)
        self.grid_rowconfigure((1, 2), weight=1)
        
        # Creating Side Bar Button here
        self.Left_Side_Bar_Button()
        
        # search Bar with Button 
        self.search_frame = customtkinter.CTkFrame(self, corner_radius=0, fg_color="transparent")
        self.search_frame.grid(row=0, column=1, sticky="nw")
        self.search_frame.grid_rowconfigure(2, weight=1)
        self.search_bar_entry = customtkinter.CTkEntry(self.search_frame, placeholder_text="Search", width=200, corner_radius=0,fg_color="#fafafa", text_color="#000000")
        self.search_bar_entry.grid(row=0, column=0, sticky="nw", pady=15)
        self.bind('<Return>', self.update_row)
        search_img = customtkinter.CTkImage(Image.open(os.path.join(image_path, "search.png")), size=(18, 18))
        self.search_btn =  customtkinter.CTkButton(self.search_frame, text="", image=search_img , command=self.update_row_for_btn, height=28, width=28,fg_color="#fafafa", corner_radius=0, border_color="#565b5e", border_width=2 )
        self.search_btn.grid(row=0, column=1, sticky="nw", pady=15, padx=(0,20))
        
        # Add form Button
        add_img = customtkinter.CTkImage(Image.open(os.path.join(image_path, "add.png")), size=(20, 20))
        self.search_btn =  customtkinter.CTkButton(self.search_frame, text="", image=add_img , command=self.Add_Data, height=30, width=30, corner_radius=5,fg_color="#fafafa")
        self.search_btn.grid(row=0, column=2, sticky="nw", pady=15)

希望能对您有所帮助,谢谢


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接