我使用tKinter,Python 2.7构建了一个简单的UI。我的代码如下所示:
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()
我想知道是否可以用更好的代码生成此代码,特别是使用for循环(或多个循环)。
我尝试声明一个列表,并尝试对其进行迭代,例如:
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)
但这没有解决,还有更多需要考虑的地方。如果有人可以向我展示一种更好的方法,我将不胜感激,因此可以将其应用于我的UI其余部分。我已经读过使用lambda函数可能是我需要做的,尽管我不确定如何...
您可以使用OrderedDict,如您所说,在字典中循环运行,并添加键(即标签)和菜单(即值)。
self.menuItems = OrderedDict([('File',self.fileMenu),('Functions',self.funcMenu),('Advanced',self.advMenu),('Tools', self.toolMenu),('Quit', root.quit)])
for k,v in self.menuItems.items():
self.menu.add_cascade(label=k, menu=v)
尝试了解这三行的工作原理并使用其逻辑。
for k,v in self.menuItems.items():
self.menu.add_cascade(label=k, menu=v)
from Tkinter import *
import Tkinter, Tkconstants, tkFileDialog, tkMessageBox
from collections import OrderedDict
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.menuItems = OrderedDict([('File',self.fileMenu),('Functions',self.funcMenu),('Advanced',self.advMenu),('Tools', self.toolMenu),('Quit', root.quit)])
for k,v in self.menuItems.items():
self.menu.add_cascade(label=k, menu=v)
self.commands = ["New", "Open", "Quit"]
for comm in self.commands:
if comm != "Quit":
self.fileMenu.add_command(label=comm)
else:
self.fileMenu.add_command(label=comm, command=root.quit)
for index in range(6):
if index != 3:
self.funcMenu.add_command(label="Properties")
else:
self.funcMenu.add('separator')
root = Tkinter.Tk()
file_zap = FileZap(root)
root.mainloop()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句