为了向自己介绍Python,我决定复制Windows附带的基本计算器。通过使用vars()函数,我已经成功地解决了命名单个按钮的初始问题,这个问题是通过一个存储在数组中的变量的循环创建的(我知道,这有点混乱)。但是,当我在函数中封装循环时,这就不起作用了。在
数组:
controls = [
["zer", "0", 0, 18, 150, 30, 70],
["one", "1", 1, 18, 115, 30, 35],
["two", "2", 2, 54, 115, 30, 35]
]
这是有效的:
^{pr2}$当尝试调整其中一个按钮的状态时,将返回一个NameError:
def setButtons(buttons)
for b in buttons:
vars()[b[0]] = Button(calc, text=b[1], command=lambda inp=b[2]:click(inp))
vars()[b[0]].place(x=b[3], y=b[4], height=b[5], width=b[6])
setButtons(controls)
我知道数组被传递给了函数,因为按钮仍然生成并表现良好。这正是我在使用vars()函数之前遇到的问题,所以我猜这将是范围界定的问题。我还应该注意到,我还没有研究字典的使用,我担心这可能会完全解决这个问题,并且消除使用vars()的需要。在
有人有什么想法吗?在
没有理由使用
vars
。简单的解决方案是将所有小部件存储在字典中:也没有好的理由使用
place
place
有它的优点,但它们很少。如果您使用pack
或grid
,那么您的GUI将更易于编写和维护。就计算器而言,grid
是一个非常自然的选择。另外,试图在数据结构中定义布局是很麻烦的。我不确定它是否有任何真正的价值,因为你不太可能创建一个通用算法,可以创建不同编号系统的计算器。在我建议将小部件的布局与小部件的创建分开。根据我的经验,这只会使GUI开发更容易。在
^{pr2}$另外,我建议不要使用像“zer”这样的名字,把一个四个字母的单词缩写成三个字母是没有任何价值的。在
相关问题 更多 >
编程相关推荐