在Python / Tkinter中,我试图从一个帧中获取一个值(整数),对它进行计算并将其作为输出返回。当只使用主框架并将所有内容放在那一帧中时,我能够使它工作。现在我想将它和另一个操作分成它们自己的帧。
我的程序将板脚转换为Lineal脚(框架A)和 线脚到板脚(框架B)。
我收到的错误如下:NameError: global name 'b_entry' is not defined
。我有一种感觉,我可能会做不正确的引用框架(自我,主,a_frame等)。
这是一个简单的例子:
import Tkinter as tk
class App:
def __init__(self, master):
self.master = master
master.grid()
b_frame = tk.Frame(master).grid(row=0)
b_name = tk.Label(b_frame, text='Blah').grid(row=1, columnspan=4)
b_label = tk.Label(b_frame, text='Label').grid(row=2, column=0)
b_entry = tk.Entry(b_frame).grid(row=2, column=1)
b_output = tk.Label(b_frame, text='Output')
b_output.grid(row=3, columnspan=2)
b_button = tk.IntVar()
tk.Button(b_frame, text='calc', command=self.convert).grid(row=4, columnspan=2)
def convert(self):
a = int(b_entry.get())
result = int(a * a)
b_output.configure(text=result)
root = tk.Tk()
App(root)
root.mainloop()
答案 0 :(得分:1)
我看到两个问题。
None
,因为这是pack
和grid
返回的值。这将搞乱您的窗口小部件层次结构,因为当b_frame
为无时,tk.Label(b_frame, ...
将使标签成为Tk窗口的子项而不是框架。self
的属性。所以你应该改变像
这样的行b_entry = tk.Entry(b_frame).grid(row = 2, column = 1)
要
self.b_entry = tk.Entry(b_frame)
self.b_entry.grid(row = 2, column = 1)
然后,您将能够正确引用convert
中的条目。
a = int(self.b_entry.get())