Python Tkinter编辑菜单窗口

Python Tkinter编辑菜单窗口,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我正在试着编辑。我如何编辑它 这是给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="Bu

我正在试着编辑。我如何编辑它

这是给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(菜单栏,宽度=20,text=“Button”).pack()

但这一个不起作用。

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

window=Tk()
mb=菜单(窗口)
菜单栏=菜单(mb,tearoff=0)
菜单栏。添加命令(label=“New”)
菜单栏。添加命令(label=“Open”)
菜单栏。添加命令(label=“Save”)
菜单栏。添加命令(label=“另存为…”)
菜单栏。添加命令(label=“Close”)
菜单栏。添加分隔符()
菜单栏。添加命令(label=“Exit”,command=window.quit)
mb.add_cascade(label=“File”,menu=菜单栏)
config(menu=mb)

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

window=Tk()
mb=菜单(窗口)
菜单栏=菜单(mb,tearoff=0)
菜单栏。添加命令(label=“New”)
菜单栏。添加命令(label=“Open”)
菜单栏。添加命令(label=“Save”)
菜单栏。添加命令(label=“另存为…”)
菜单栏。添加命令(label=“Close”)
菜单栏。添加分隔符()
菜单栏。添加命令(label=“Exit”,command=window.quit)
mb.add_cascade(label=“File”,menu=菜单栏)
config(menu=mb)

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

import tkinter as tk
from tkinter import ttk
全球图书目录

nombre_ventanas={'PageOne'}
在一个菜单栏中,您需要为要显示的每个菜单添加类似的菜单。全球菜单栏、菜单栏1、菜单栏2

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)
主要

用于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)

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

import tkinter as tk
from tkinter import ttk
全球图书目录

nombre_ventanas={'PageOne'}
在一个菜单栏中,您需要为要显示的每个菜单添加类似的菜单。全球菜单栏、菜单栏1、菜单栏2

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)
主要

用于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)

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

  • 添加
  • add_命令
  • 添加级联
  • 添加检查按钮
  • add_单选按钮
  • 添加分隔符
要添加文本标签,可以使用
add_命令
,并将
命令
属性设置为
None


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

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

  • 添加
  • add_命令
  • 添加级联
  • 添加检查按钮
  • add_单选按钮
  • 添加分隔符
要添加文本标签,可以使用
add_命令
,并将
命令
属性设置为
None


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

Offtopic:请用Python区分类(CamelCase;你做得对)和实例(全部小写,你做得不对;window,mb,menubar)好的,谢谢。我认为这看起来更好。可读性很重要。你说的“编辑”是什么意思?您希望进行什么类型的编辑?例如添加按钮、标签或其他。Offtopic:请用Python将类(CamelCase;您做得对)与实例(全部小写,您做得不对;window、mb、menubar)区分开来,好的,谢谢。我认为这看起来更好。可读性很重要。你说的“编辑”是什么意思?您希望进行哪种编辑?例如添加按钮、标签或其他。效果很好,除了
top.config
我认为在您的情况下应该是
window.config
?效果很好,除了
top.config
之外,我认为在您的情况下应该是
window.config
?使用Himanshu的答案,没有必要使用
command=None
。您可以简单地省略
command
作为参数/参数。使用Himanshu的答案,不需要
command=None
。您只需将
命令
作为参数/参数省略即可。