【问题标题】:Python Tkinter Edit Menu WindowPython Tkinter 编辑菜单窗口
【发布时间】:2019-08-12 16:53:55
【问题描述】:

我正在尝试编辑Menu window。我该如何编辑它?

这适用于 Windows。

from tkinter import *

Window = Tk()

MB = Menu(Window)
Window.config(menu=MB)

Menubar = Menu(MB)
MB.add_cascade(label="File", menu=Menubar)
Menubar.add_command(label="New File")

#Btn1 = Button(Menubar, width=20, text="Button").pack() #I failed.

Window.mainloop()

我试过Btn1 = Button(Menubar, width=20, text="Button").pack() 但是这个不行。

【问题讨论】:

  • Offtopic:请区分 Python 中的类(CamelCase;你做对了)和实例(全小写,你做错了;窗口、mb、菜单栏)
  • 好的,谢谢。我觉得这个更好看。
  • 可读性很重要。
  • “编辑”是什么意思?您希望进行什么样的编辑?
  • 例如添加按钮、标签等。

标签: python python-3.x tkinter


【解决方案1】:

通常您会像这样将项目添加到菜单中 - 但要寻找什么?

window = Tk()
mb = Menu(window)  
menu_bar = Menu(mb, tearoff=0)  
menu_bar.add_command(label="New")  
menu_bar.add_command(label="Open")  
menu_bar.add_command(label="Save")  
menu_bar.add_command(label="Save as...")  
menu_bar.add_command(label="Close")  

menu_bar.add_separator()  

menu_bar.add_command(label="Exit", command=window.quit)  

mb.add_cascade(label="File", menu=menu_bar)

top.config(menu=mb)

【讨论】:

  • 效果很好,除了top.config 我认为在你的情况下应该是window.config
【解决方案2】:

您不能将任意小部件添加到菜单中。要将项目添加到菜单中,您必须使用 Menu 对象上可用的以下功能之一:

  • add
  • add_command
  • add_cascade
  • add_checkbutton
  • add_radiobutton
  • add_separator

要添加文本标签,您可以使用add_command 并将command 属性设置为None

所有这些都与菜单小部件定义本身一起记录,并且几乎在任何包含小部件文档的网站上。

【讨论】:

  • 使用 Himanshu 的答案,不需要command=None。您可以简单地将command 作为参数/参数省略。
【解决方案3】:

如果您正在寻找带有按钮的菜单栏控件,您可以做到。所有代码都将在 Python3 中的同一个 file.py .Libraries 中(对于 Python 2 更改为 import Tkinter as tk)。稍后,您可以使用带有按钮的每个菜单重定向到每个窗口。

import tkinter as tk
from tkinter import ttk

的全球标题列表
nombre_ventanas={'PageOne'}

一个菜单栏,您需要为要显示的每个菜单添加类似的。 menubar_global, menubar1, menubar2, ...

def menubar_global(self, root, controller):

    menubar_global = tk.Menu(root)

    page_1 = tk.Menu(menubar_global, tearoff=0)

    # With Submenu for page_1

    page_1_1=tk.Menu(page_1 , tearoff=0)
    page_1_2=tk.Menu(page_1 , tearoff=0)

主要

if __name__ == "__main__":
    app = ControlWindow()
    app.mainloop()

windows控制类

class ControlWindow(tk.Tk):

    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)

        container = tk.Frame(self)

        container.pack(side="top", fill="both", expand=True)

        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}

        self._nombre_ventanas = nombre_ventanas

        for F in self._nombre_ventanas:

            F = eval(F)
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky="nsew")

        # First window
        self.show_frame(Login)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

        # Title for each page
        self.title(titulo_ventanas[cont._name_for_menu_bar])

        # Here you can add if-sentece for each menubar that you want 
        if cont._name_for_menu_bar != "PageOne":

            # Menu bar
            print("show_frame", cont)
            menubar = frame.menubar(self)
            self.configure(menu=menubar)

        else:
            menubar = 0
            self.configure(menu=menubar)

class Ventana_proveedores(tk.Frame):

    _name_for_menu_bar = "Ventana_proveedores"

    _config = configuracion

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        self.controller = controller

        tk.Button(self, text='Regresar', font=FONT_LABELFRAME,
                command=lambda: controller.show_frame(Ventana_gerente)).grid(row=0, column=0)

    def menubar(self, root):
        return menubar_global(self, root, self.controller)

以后每个页面都需要有这个配置

class PageOne(tk.Frame):

    _name_for_menu_bar = "PageOne"


    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        self.controller = controller

    def menubar(self, root):
        return menubar_global(self, root, self.controller)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多