chiyexiang 2019-11-29 10:54 采纳率: 0%
浏览 989

求问,用tkinter画一个界面,如何改变菜单栏的state属性?求大神!求!

最开始设置了两个菜单的state状态是disabled,点不了,希望用户点了主菜单的选择工程之后,两个菜单的状态变成normal可以点击
图片说明

代码如下:

import os, sys
from tkinter.font import Font
from tkinter import *
from tkinter.ttk import *
from tkinter.messagebox import *

class Application_ui(Frame):
#这个类仅实现界面生成功能,具体事件处理代码在子类Application中。
def init(self, master=None):
Frame.__init__(self, master)
self.master.title('海港高桩码头结构安全评估及预警平台')
self.master.geometry('808x447')
self.createWidgets()

def createWidgets(self):
    self.top = self.winfo_toplevel()

    self.style = Style()

#主菜单
self.MainMenu = Menu(self.top, tearoff=0)
self.top['menu'] = self.MainMenu

    self.Sysmenu = Menu(self.MainMenu, tearoff=0)
    self.MainMenu.add_cascade(menu=self.Sysmenu, label='主菜单[M]', underline=4)
    self.Choose_project = Menu(self.Sysmenu, tearoff=0)
    self.Sysmenu.add_cascade(menu=self.Choose_project, label='选择工程')
    self.Choose_project.add_command(label='天津港南疆27#通用码头工程', command=self.My_project_Cmd)
    self.Choose_project.add_command(label='其它', state='disabled', command=self.Other_project_Cmd)


    self.Sysmenu.add_command(label='返回主界面', accelerator='Ctrl-B', command=self.Return_mainform_Cmd)
    self.top.bind_all('<Control-B>', self.Return_mainform_Cmd)
    self.top.bind_all('<Control-b>', self.Return_mainform_Cmd)

    self.Sysmenu.add_command(label='退出程序[X]', accelerator='Ctrl-X', command=self.Exit_program_Cmd)
    self.top.bind_all('<Control-X>', self.Exit_program_Cmd)
    self.top.bind_all('<Control-x>', self.Exit_program_Cmd)

#安全评估

    self.Safe_assess = Menu(self.MainMenu, tearoff=0)
    self.MainMenu.add_cascade(menu=self.Safe_assess, label='安全评估[A]', state='disabled', underline=5)

    self.Safe_assess.add_command(label='码头结构示意图', accelerator='Ctrl-P', command=self.Show_picture_Cmd)
    self.top.bind_all('<Control-P>', self.Show_picture_Cmd)
    self.top.bind_all('<Control-p>', self.Show_picture_Cmd)

    self.Safe_assess.add_command(label='码头结构安全评估', accelerator='Ctrl-M', command=self.My_assess_Cmd)
    self.top.bind_all('<Control-M>', self.My_assess_Cmd)
    self.top.bind_all('<Control-m>', self.My_assess_Cmd)

预警系统

    self.Warn_sys = Menu(self.MainMenu, tearoff=0)
    self.MainMenu.add_cascade(menu=self.Warn_sys, label='预警系统[W]', state='disabled', underline=5)

    self.Warn_sys.add_command(label='码头结构安全预警', accelerator='Ctrl-J', command=self.Warn_wharf_Cmd)
    self.top.bind_all('<Control-J>', self.Warn_wharf_Cmd)
    self.top.bind_all('<Control-j>', self.Warn_wharf_Cmd)
    self.Warn_sys.add_command(label='岸坡安全预警', accelerator='Ctrl-O', command=self.Warn_slope_Cmd)
    self.top.bind_all('<Control-O>', self.Warn_slope_Cmd)
    self.top.bind_all('<Control-o>', self.Warn_slope_Cmd)

#安全日志及帮助
self.MainMenu.add_command(label='安全日志[L]', underline=5, command=self.Safe_log_Cmd)
self.MainMenu.add_command(label='帮助[H]', underline=3, command=self.My_help_Cmd)

class Application(Application_ui):

def __init__(self, master=None):
    Application_ui.__init__(self, master)

def My_project_Cmd(self, event=None):
    pass


def Other_project_Cmd(self, event=None):
    #TODO, Please finish the function here!
    pass

def Return_mainform_Cmd(self, event=None):
    #TODO, Please finish the function here!
    pass

def Exit_program_Cmd(self, event=None):
    #TODO, Please finish the function here!
    pass

def Show_picture_Cmd(self, event=None):
    #TODO, Please finish the function here!
    pass

def My_assess_Cmd(self, event=None):
    #TODO, Please finish the function here!
    pass

def Warn_wharf_Cmd(self, event=None):
    #TODO, Please finish the function here!
    pass

def Warn_slope_Cmd(self, event=None):
    #TODO, Please finish the function here!
    pass

def Safe_log_Cmd(self, event=None):
    #TODO, Please finish the function here!
    pass

def My_help_Cmd(self, event=None):
    #TODO, Please finish the function here!
    pass

app=Application()
app.mainloop()

  • 写回答

2条回答 默认 最新

  • Python-ZZY 2021-10-10 17:48
    关注

    菜单有一个entryconfig方法,可以改变菜单的一些内容

    menu.entryconfig(0,label="text",state="normal")
    '''
    意思是把菜单(cascade)的0索引进行更改,
    只要把state变成disabled就可以禁用,normal就可以改回去
    '''
    
    评论

报告相同问题?

悬赏问题

  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏