【问题标题】:Tkinter menu is not appearing on MacOS 11.2.2Tkinter 菜单未出现在 MacOS 11.2.2 上
【发布时间】:2021-03-31 17:44:15
【问题描述】:

我正在尝试创建一个应用程序来显示电气系统研究中的实时数据。该菜单将用于打开“首页”上显示的每个图表的历史信息,还将包括一个退出选项。当我创建菜单并向其中添加几个项目时,运行应用程序时它不会显示。不幸的是,在我的搜索中,我尝试过的所有替代方案也没有出现。

from tkinter import *
from tkinter import ttk


class PicoGridInterfacing(Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.grid()
        menubar = Menu(root)
        menu = Menu(menubar)
        menubar.add_cascade(label="Menu", menu=menu)
        menu.add_command(label="History", command=None)
        menu.add_command(label="Quit", command=root.quit)

        batteryData = Frame(root)
        batteryData.grid(row=1, column=0)
        Label(batteryData, text="Hello!").grid()


root = Tk()
root.title("Electric Power Systems Lab Pico Grid Interfacing")
app = PicoGridInterfacing(master=root)
root.mainloop()

这是我看到的输出截图: Screenshot of output

任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 我不明白你到底想做什么。您是否尝试创建下拉菜单?你能告诉我你到底想让这个程序做什么吗?
  • @TheLizzard 道歉,我第一次使用堆栈。我正在尝试在 Tkinter 中创建一个下拉菜单。截至目前,该菜单将只有一个占位符来查看数据历史记录和退出应用程序的选项。该应用程序本身被用于研究以显示图表。这是我希望 GUI 看起来像样机的链接 - imgur.com/a/W7JMZOL
  • 您实际上从未将菜单栏附加到窗口 - 类似于 root.config(menu=menubar)
  • @jasonharper 就是这样!不敢相信我在浏览教程时一定错过了,非常感谢!

标签: python tkinter tkinter-menu


【解决方案1】:

试试这个:

from tkinter import *
from tkinter import ttk


class PicoGridInterfacing(Frame):
    def __init__(self, master=None):
        super().__init__(master)

        # master = master # `super().__init__(master)` already does that so its useless

        # Creating the menu
        menubar = Menu(root)
        menu = Menu(menubar, tearoff=False)
        menubar.add_cascade(label="Menu", menu=menu)
        menu.add_command(label="History", command=None)
        menu.add_command(label="Quit", command=root.destroy)

        # Tell the `Tk()` that there is a menu that it need to display:
        master.config(menu=menubar)

        batteryData = Frame(self)
        batteryData.grid(row=1, column=0)
        Label(batteryData, text="Hello!").grid()


root = Tk()
root.title("Electric Power Systems Lab Pico Grid Interfacing")
app = PicoGridInterfacing(master=root)
# When you inherit from `Frame` you always what the user to call `.grid`
app.grid()
root.mainloop()

您需要告诉tkinter.Tk() 有一个菜单,否则它会忽略它。此外,从tkinter.Frame 继承时,调用者的工作是调用.grid(这是约定)。

【讨论】:

  • 如果您添加解释,此答案会更好。否则,我们必须逐行逐字符地将您的代码与原始代码进行比较,以查看您所做的更改。
  • @BryanOakley 我认为 cmets 就足够了。我会解释到最后。感谢您的建议。
【解决方案2】:

您需要将菜单栏附加到根窗口。

那就这样做吧:root.config(menu=menubar)

【讨论】:

  • 下次请提供一些代码来向 OP 展示如何做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
相关资源
最近更新 更多