我有一个代码,我正在尝试处理框架中按钮的几何形状和另一个框架中的条目。但它似乎并没有独立于主窗口,它们都是孩子们。
try: # In order to be able to import tkinter for
import tkinter as tk # either in python 2 or in python 3
except ImportError:
import Tkinter as tk
class NumPad(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.button = tk.Button(text=0)
self.button.grid(row=1, column=0, sticky='nsew')
class CalcFrame(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.entry = tk.Entry(self)
self.entry.pack()
if __name__ == '__main__':
root = tk.Tk()
frame1 = CalcFrame(master=root)
frame2 = NumPad(master=root)
frame1.grid(row=0, column=0)
frame2.grid(row=1, column=0, sticky='nsew')
root.mainloop()
在上面的代码中,如果我替换:
self.button.grid(row=0, column=0, sticky='nsew')
有:
self.button.grid(row=1, column=0, sticky='nsew')
frame2
中的小部件与frame1
上的小部件重叠。如何为每个小部件提供内部网格?现在似乎只有一个顶级网格。
正如Bryan Oakley在上面的评论中指出的那样,当你在这条线上声明Button
小部件时......
self.button = tk.Button(text=0)
您没有将它指定为父级,这意味着默认情况下它只会将自身转储到Tk()
窗口中。
在旁注中,你有变量,他们的名字表明它们是Frame
小部件(即frame1
和frame2
),但实际上似乎是对不使用Frame
小部件的类的引用。
Frame
小部件功能非常强大,可用于在同一窗口中轻松分离多组小部件。使用Frames
的示例如下:
from tkinter import *
root = Tk()
frame1 = Frame(root, borderwidth=1, relief="solid")
frame2 = Frame(root, borderwidth=1, relief="solid")
frame1.pack(side="left", fill="both", expand=True, padx=10, pady=10)
frame2.pack(side="right", fill="both", expand=True, padx=10, pady=10)
label1 = Label(frame1, text="I'm inside a frame")
label2 = Label(frame2, text="I'm inside a different frame")
label1.pack()
label2.pack()
root.mainloop()
这表明您可以使用不同的几何管理器为其父项创建小部件:
from tkinter import *
root = Tk()
frame1 = Frame(root)
frame2 = Frame(root)
frame1.pack(side="left")
frame2.pack(side="right")
label1 = Label(frame1, text="I'm grid")
label2 = Label(frame1, text="I'm grid")
label3 = Label(frame2, text="I'm pack")
label4 = Label(frame2, text="I'm pack")
label1.grid(row=0, column=0)
label2.grid(row=0, column=1)
label3.pack()
label4.pack()
root.mainloop()