【问题标题】:Python Tkinter Menu creation not workingPython Tkinter 菜单创建不起作用
【发布时间】:2017-06-18 09:06:50
【问题描述】:

我是编程新手,正在尝试使用 Tkinter 包在 Python 中创建一个菜单。但是每当我在 IDLE 中运行脚本时,所显示的只是顶层(根)窗口。

这是我的脚本:

from tkinter import *
from tkinter import ttk

root.option_add('*tearOff', False)

menubar1 = Menu(root)
root.configure(menu = menubar1)
file = Menu(menubar1)
edit = Menu(menubar1)
help_ =  Menu(menubar1)
tools = Menu(menubar1)
other = Menu(menubar1)

menubar1.add_cascade(menu = file, label = 'File')
menubar1.add_cascade(menu = edit, label = 'Edit')
menubar1.add_cascade(menu = help_, label = 'Help')
menubar1.add_cascade(menu = tools, label = 'Tools')
menubar1.add_cascade(menu = other, label = 'Other')

知道为什么吗?

提前致谢。

【问题讨论】:

  • 您发布的代码甚至无法运行,因为它缺少tkinter.Tk 实例(可能保存在root)和root.mainloop。如果我添加这些部分,对我来说效果很好。
  • 答案是如此之小,它甚至应该得到一个定义的答案只是一个评论
  • 你试过在没有 IDLE 的情况下运行它吗? IDLE 是用tkinter 创建的,所以有时可能会发生冲突。但是 IDLE 只是开发代码的工具,当代码准备好时,你就不要使用 IDLE 来运行它。
  • TidB,tkinter.Tk 实例是什么意思?
  • 查看我的答案(基本上,Tk() 定义了你的根:root = tkinter.Tk()

标签: python python-2.7 tkinter menu python-3.5


【解决方案1】:

正如 cmets 所指出的,令人惊讶的是,您的代码完全可以正常工作:在您尝试对其使用 option_add 之前未定义 root,因此它会触发 NameError: name 'root' is not defined

但如果你定义它,它起作用。有人已经对解决方案发表了评论。 tkinter.Tk 实例是您首先定义根以创建窗口的方式。 mainloop() 是您维护该窗口的方法。这比听起来更容易:

from tkinter import *
import tkinter as tk # you could just say 'import tkinter', but 'tk' is easier to type

root = tk.Tk() # or, as @TidB mentioned, tkinter.Tk() if you're importing it as it is

root.option_add('*tearOff', False)
# insert all your code....
# and so on...
menubar1.add_cascade(menu = other, label = 'Other')

root.mainloop() # keeps the window up

基本上,只需添加 mainloop() 和 Tk()。

此外,由于from tkinter import * 自然会导入所有内容,因此您几乎可以肯定不需要from tkinter import ttk(您的第二行代码)。

【讨论】:

    猜你喜欢
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2020-11-22
    相关资源
    最近更新 更多