我用两种不同的方式编写了这段代码。只有第二个有效,但我不明白为什么。
1:
buttons = Frame(calculator, bg="green", width=200, height=400).grid()
buttons.columnconfigure(0)
2:
buttons = Frame(calculator, bg="green", width=200, height=400)
buttons.grid()
buttons.columnconfigure(0)
答案 0 :(得分:8)
正如我在评论中所说,我希望这些小代码能让你理解这个问题。
class Person:
def __init__(self, name):
self.name = name
def greet(self):
pass
Joe = Person("Joe")
Joe.greet()
Pet = Person("Pet").greet()
print(Joe)
print(Pet)
输出:
<__main__.Person object at 0x7f1020983080>
None
您遇到的问题是Frame
构造函数返回Frame
类型的对象,而grid
方法不返回任何内容。这就是您遇到NoneType
错误的原因。
答案 1 :(得分:2)
此:
buttons = Frame(calculator, bg="green", width=200, height=400).grid()
Frame
对象.grid()
,.grid()
绑定到名称buttons
Frame
对象虽然:
buttons = Frame(calculator, bg="green", width=200, height=400)
buttons.grid()
Frame()
对象并将其绑定到名称button
.grid()
对象上调用Frame()
并丢弃此调用的结果。所以这两个片段显然不相同。在第一个中,buttons
是返回的Frame().grid()
(实际上似乎是None
),在第二个中,buttons
是Frame()
对象
如果要分解第一个语句,则需要一个中间变量(不是buttons
)来引用Frame()
对象并在此变量上调用grid()
:
frame = Frame(calculator, bg="green", width=200, height=400)
buttons = frame.grid()
答案 2 :(得分:1)
它是一样的!你也可以这样做!
buttons = Frame(calculator, bg="green", width=200, height=400).grid().columnconfigure(0)
你可以按行使用多种方法