【问题标题】:Is it possible to manage geometry modularly?是否可以模块化管理几何?
【发布时间】:2017-10-25 02:45:20
【问题描述】:

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

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 中的小部件重叠。我怎样才能在每个小部件的基础上拥有一个内部网格?现在好像只有一个顶级网格。

【问题讨论】:

  • 好吧,如果你不做那个改变,你似乎得到了你想要的,那为什么要改变呢?
  • 你没有给按钮一个父/主,所以它默认为根窗口。
  • @BryanOakley 是的,我想我已经设法解决了按钮上的这个设置主参数,谢谢!

标签: python python-3.x tkinter tk


【解决方案1】:

正如 Bryan Oakley 在上面的 cmets 中指出的那样,当您在这一行声明 Button 小部件时...

self.button = tk.Button(text=0)

您没有为其分配父级,这意味着默认情况下它只是将自己转储到Tk() 窗口中。

附带说明,您有变量,它们的名称表明它们是Frame 小部件(即frame1frame2),但实际上似乎是对从未使用过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()

【讨论】:

  • 我仍然无法对其中包含由 .pack 管理其几何形状的小部件的框架进行网格化,这正常吗?
  • @Nae 我已经更新了我的答案,以证明您肯定可以拥有具有与其父级不同的几何管理器的小部件。你不能做的是在同一个父级中有多个几何管理器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多