Я построил простой пользовательский интерфейс с помощью tKinter, Python 2.7. Мой код выглядит следующим образом:Создать tKinter-меню с помощью цикла
from Tkinter import *
import Tkinter, Tkconstants, tkFileDialog, tkMessageBox
class FileZap():
def __init__(self, root):
root.title("Test_App")
root.geometry("900x550")
self.menu = Menu(root)
self.fileMenu = Menu(self.menu)
self.funcMenu = Menu(self.menu)
self.advMenu = Menu(self.menu)
self.toolMenu = Menu(self.menu)
root.config(menu=self.menu, width=500, relief=RAISED, borderwidth=2)
self.menu.add_cascade(label="File", menu=self.fileMenu)
self.menu.add_cascade(label="Functions", menu=self.funcMenu)
self.menu.add_cascade(label="Advanced", menu=self.advMenu)
self.menu.add_cascade(label="Tools", menu=self.toolMenu)
self.menu.add_command(label="Quit", command=root.quit)
self.fileMenu.add_command(label="New")
self.fileMenu.add_command(label="Open")
self.fileMenu.add_command(label="Quit", command=root.quit)
self.funcMenu.add_command(label="Properties")
self.funcMenu.add_command(label="Properties")
self.funcMenu.add_command(label="Properties")
self.funcMenu.add('separator')
self.funcMenu.add_command(label="Properties")
self.funcMenu.add_command(label="Properties")
root = Tkinter.Tk()
file_zap = FileZap(root)
root.mainloop()
Мне интересно, если я могу генерировать это с более code- специально используя цикл (или несколько петель).
Я попытался объявить список и попытаться итерацию через него для некоторых это, так, например:
menuItems = ['File','Functions','Advanced','Tools','Quit']
for item in menuItems:
self.menu.add_cascade(label=item, menu=self.fileMenu)
заменить этот блок:
self.menu.add_cascade(label="File", menu=self.fileMenu)
self.menu.add_cascade(label="Functions", menu=self.funcMenu)
self.menu.add_cascade(label="Advanced", menu=self.advMenu)
self.menu.add_cascade(label="Tools", menu=self.toolMenu)
self.menu.add_command(label="Quit", command=root.quit)
, но это не сработало и есть еще что рассмотреть. Я был бы признателен, если бы кто-то мог показать мне лучший способ сделать это, поэтому я могу применить его к остальной части моего пользовательского интерфейса. Я читал, что использование лямбда-функций может быть тем, что мне нужно делать, хотя я еще не уверен, как ...
ах это замечательно. Я посмотрел, что вы здесь делаете, и это имеет смысл для меня. Раньше я не встречался с OrderedDict, поэтому что-то новое, чтобы посмотреть там. Спасибо за этот ответ, очень полезно. – JamesPy