import tkinter as tk class App: def __init__(self, master=None): if master is None: master = tk.Tk() master.title("My App") master.geometry("400x300") self.master = master else: self.master = master self.master.title("My App") self.master.geometry("400x300") self.menu_bar = tk.Menu(self.master, tearoff=0) self.menu_bar.pack() self.create_menu() def create_menu(self): self.menu_bar.delete(1, tk.END) self.menu_bar.insert(tk.END, "Option") self.menu_bar.insert(tk.END, "Option") self.menu_bar.insert(tk.END, "Option") root = tk.Tk() app = App(root) root.mainloop()
时间: 2024-04-28 21:20:05 浏览: 114
这是一个使用 Tkinter 模块构建 GUI 应用程序的 Python 代码。该应用程序包含一个菜单栏和三个菜单选项。在创建 App 类的实例时,可以选择传入一个 master 参数,以便在现有的 Tkinter 窗口中添加菜单栏。如果没有传入 master 参数,则会创建一个新的窗口。在 create_menu() 方法中,使用 menu_bar.delete() 方法删除菜单栏中的所有选项,然后使用 menu_bar.insert() 方法添加三个新选项。最后,通过调用 root.mainloop() 方法启动应用程序的事件循环,等待用户输入。
相关问题
import tkinter as tk class App: def __init__(self, master=None): if master is None: master = tk.Tk() master.title("My App") master.geometry("400x300") self.master = master self.menu_bar = tk.Menu(self.master, tearoff=0) self.menu_bar.pack() self.create_menu() def create_menu(self): self.menu_bar.delete(1, tk.END) self.menu_bar.insert(tk.END, "Option") self.menu_bar.insert(tk.END, "Option") root = tk.Tk() app = App(root) root.mainloop() 报错self.tk.call(_tkinter.TclError: can't pack ".!menu": it's a top-level window
这个错误是因为你在menu_bar上使用了pack方法,而menu_bar是一个Menu对象,而Menu对象并不支持pack方法。你可以使用add_cascade方法将Menu对象添加到主菜单栏中,而不是使用pack方法。例如:
```
import tkinter as tk
class App:
def __init__(self, master=None):
if master is None:
master = tk.Tk()
master.title("My App")
master.geometry("400x300")
self.master = master
self.menu_bar = tk.Menu(self.master, tearoff=0)
self.master.config(menu=self.menu_bar) # 设置菜单栏
self.create_menu()
def create_menu(self):
option_menu = tk.Menu(self.menu_bar, tearoff=0)
option_menu.add_command(label="Option 1")
option_menu.add_command(label="Option 2")
self.menu_bar.add_cascade(label="Options", menu=option_menu)
root = tk.Tk()
app = App(root)
root.mainloop()
```
这个代码创建了一个菜单栏,并在菜单栏中添加了一个名为“Options”的菜单,菜单中包含两个选项“Option 1”和“Option 2”。注意,在这个例子中,我们使用了add_cascade方法将option_menu添加到了menu_bar中。
import tkinter as tk class App: def init(self, master=None): if master is None: master = tk.Tk() master.title("My App") master.geometry("400x300") self.master = master else: self.master = master self.master.title("My App") self.master.geometry("400x300") self.menu_bar = tk.Menu(self.master, tearoff=0) self.menu_bar.pack() self.create_menu() def create_menu(self): self.menu_bar.delete(1, tk.END) self.menu_bar.insert(tk.END, "Option") self.menu_bar.insert(tk.END, "Option") self.insert(tk.END, "Option") root = tk.Tk() app = App(root) root.mainloop(),这段代码报错self.tk.call( _tkinter.TclError: can't pack ".!menu": it's a top-level window,如何解决?
这个错误是因为你使用了 `self.insert` 而不是 `self.menu_bar.insert`,导致在菜单栏中插入了一个顶级窗口,而菜单栏只能包含菜单项目。你可以将 `self.insert` 改为 `self.menu_bar.insert`。修改后的代码如下:
```
import tkinter as tk
class App:
def __init__(self, master=None):
if master is None:
master = tk.Tk()
master.title("My App")
master.geometry("400x300")
self.master = master
self.menu_bar = tk.Menu(self.master, tearoff=0)
self.menu_bar.pack()
self.create_menu()
def create_menu(self):
self.menu_bar.delete(1, tk.END)
self.menu_bar.insert(tk.END, "Option")
self.menu_bar.insert(tk.END, "Option")
root = tk.Tk()
app = App(root)
root.mainloop()
```
这样就不会出现这个错误了。
阅读全文