我希望课程material_menu
继承Menubutton
方法grid
和grid_forget
,以便我可以展示或隐藏小部件。我不知道我应该继承哪个类以及如何修改函数set_state
。请帮忙,提出一些例子。
from tkinter import *
from tkinter import ttk
class material_menu():
def __init__(self, name):
menubutton = ttk.Menubutton(text=name)
menubutton.menu = Menu(menubutton)
menubutton["menu"] = menubutton.menu
dict = {}
for sheet_name in ["Menu A", "Menu B", "MenuC"]:
dict[sheet_name] = Menu(menubutton.menu)
menubutton.menu.add_cascade(label=sheet_name, menu=dict[sheet_name])
for material in ["item1", "item2", "item3"]:
dict[sheet_name].add_command(label=material, command=lambda sheet_name=sheet_name, material=material: test(sheet_name, material))
def set_state(self, state, row):
if state==0:
menubutton.grid_forget()
else:
menubutton.grid(column=0, row=row, sticky=(N, S, E, W))
def test(sheet_name, material):
print(sheet_name)
print(material)
if __name__ == "__main__":
win = Tk()
a=material_menu("Menubutton")
a.set_state(1, 0)
win.mainloop()
答案 0 :(得分:1)
你的问题不在于继承tkinter方法,这也不是tkinter的问题。
在上面的代码中,set_state
是 __init__
下的函数。这就是为什么你不能在__init__
范围之外使用它的原因。如果您想使用set_state
作为material_menu
类的方法;
set_state
中的缩进
它的定义与__init__
相同。menubutton
”重命名为“self.menubutton
”
它不再是一个变量,而是一个类的属性
material_menu
。你应该总共重命名9个。您的代码应该完全像:
from tkinter import *
from tkinter import ttk
class material_menu():
def __init__(self, name):
self.menubutton = ttk.Menubutton(text=name)
self.menubutton.menu = Menu(self.menubutton)
self.menubutton["menu"] = self.menubutton.menu
dict = {}
for sheet_name in ["Menu A", "Menu B", "MenuC"]:
dict[sheet_name] = Menu(self.menubutton.menu)
self.menubutton.menu.add_cascade(label=sheet_name, menu=dict[sheet_name])
for material in ["item1", "item2", "item3"]:
dict[sheet_name].add_command(label=material, command=lambda sheet_name=sheet_name, material=material: test(sheet_name, material))
def set_state(self, state, row):
if state==0:
self.menubutton.grid_forget()
else:
self.menubutton.grid(column=0, row=row, sticky=(N, S, E, W))
def test(sheet_name, material):
print(sheet_name)
print(material)
if __name__ == "__main__":
win = Tk()
a=material_menu("Menubutton")
a.set_state(1, 0)
win.mainloop()