[英]Tkinter frame alignment (grid layout)
In Python/Tkinter, I am trying to get a value (integer) from a frame, do a calculation on it and return it as an output. 在Python / Tkinter中,我试图从框架中获取一个值(整数),对其进行计算并将其作为输出返回。 I was able to make it work when using only a master frame and putting everything in that one frame. 当仅使用一个主框架并将所有内容放入该框架时,我能够使其工作。 Now I want to separate it and another operation into their own frames. 现在,我想将它和其他操作分离到各自的框架中。
My program converts board feet to Lineal feet (frame A) and Lineal feet to board feet (frame B). 我的程序将木板英尺转换为线性英尺(框架A),并将线性英尺转换为木板英尺(框架B)。
I get errors like: NameError: global name 'b_entry' is not defined
. 我收到如下错误: NameError: global name 'b_entry' is not defined
。 I have a feeling I might be doing things like referencing frames (self, master, a_frame, etc.) improperly. 我有一种感觉,我可能在做诸如未正确引用框架(自身,主框架,a_frame等)之类的事情。
Here's a simple example: 这是一个简单的例子:
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()
I see two issues. 我看到两个问题。
None
, because that's what pack
and grid
return. 这将导致变量的值为None
,因为这就是pack
和grid
返回的内容。 This will screw up your widget hierarchy because when b_frame
is None, tk.Label(b_frame, ...
will make the label a child of the Tk window instead of the Frame. 因为b_frame
为None, tk.Label(b_frame, ...
将使标签成为Tk窗口而不是Frame的子tk.Label(b_frame, ...
这将使小部件层次结构b_frame
。 self
. 如果希望变量在类的所有方法中可见,则应将其分配为self
的属性。 So you should change lines like 所以你应该改变像
b_entry = tk.Entry(b_frame).grid(row = 2, column = 1)
To 至
self.b_entry = tk.Entry(b_frame)
self.b_entry.grid(row = 2, column = 1)
Then you will be able to properly reference the entry in convert
. 然后,您将能够正确引用convert
的条目。
a = int(self.b_entry.get())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.