我正在写一个Tkinter程序,我可以制作多个帧,我可以选择它们相对于彼此的位置,所以我决定使用grid()来决定哪个帧在哪里。我还有一个类AppButton,它创建一个按钮/标签/条目。我试图传递我想要创建按钮的框架,并使用网格来确定它相对于它创建的框架的位置。
目前,按钮不会在我尝试传递的帧中生成,而是使用与帧相同的网格,只是放在那里,回头看起来很有意义。
我的问题是,如何更改此选项,以便按钮的网格是一个单独的网格,仅相对于它创建的框架?这样,如果我移动框架,按钮也会,但它们在框架中的相对位置保持不变。
现在框架和按钮共享相同的网格,这就是他们的位置确定的方式。
import Tkinter as tk
import tkFileDialog as tkfd
class AppButton:
#simple button construction
#create a button with chosen arguments
def create_button(self, words, rownum, frame):
btn = tk.Button(frame, text = words)
btn.grid(row = rownum, column = 2)
def create_entry(self, rownum, frame):
txt = tk.Entry(frame)
txt.grid(row = rownum, column = 1)
def create_label(self, words, rownum, frame):
lbl = tk.Label(frame, text = words)
lbl.grid(row = rownum, column = 0)
#input is composed of a Label, an Entry, and a Button. calls the three funcs above
def create_input(self, words, rownum, frame):
self.create_label(words, rownum, frame)
self.create_entry(rownum, frame)
self.create_button("OK", rownum, frame)
class Application(tk.Frame):
"""A GUI application that creates multiple buttons"""
#create a class variable from the root(master) called by the constructor
def __init__(self, master):
self.master = master
master.title("The best GUI")
tk.Frame.__init__(self, master, width=200, height=200)
self.grid(row = 0, column = 0)
def new_frame(self, master, color, row, column):
frame = tk.Frame(master, width=200, height=200, bg=color)
frame.grid(row = row, column = column)
return frame
if __name__ == "__main__":
root = tk.Tk()
root.title("Button Test Launch")
app = Application(root)
appbutton = AppButton()
frame1 = app.new_frame(root, "red", 3, 1)
frame2 = app.new_frame(root, "blue", 2, 2)
appbutton.create_input("test1", 0, root)
appbutton.create_input("test2", 1, root)
appbutton.create_input("test3", 2, root)
appbutton.create_input("test4", 3, root)
root.mainloop()
以下是现在的样子: Current GUI
我希望的最终结果是例如" test1 ______ [OK]"完全属于这些框架中的一个。
答案 0 :(得分:1)
您告诉按钮使用method
作为其父级。相反,你应该传递框架:
root