是否可以模块化地管理几何?

时间:2017-10-25 02:45:21

标签: python python-3.x tkinter tk

我有一个代码,我正在尝试处理框架中按钮的几何图形和另一个框架中的条目。但它似乎并没有独立于主窗口,它们都是孩子们。

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上的小部件重叠。如何为每个小部件提供内部网格?现在似乎只有一个顶级网格。

1 个答案:

答案 0 :(得分:2)

正如Bryan Oakley在上面的评论中指出的那样,当你在这一行宣布Data = ...小部件时......

Button

您没有为其指定父级,这意味着默认情况下它只会将自身转储到self.button = tk.Button(text=0) 窗口。

在旁注中,您有一些变量,根据其名称显示它们是Tk()小部件(即Frameframe1),但实际上似乎是对哪些类的引用#&# 39;使用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()