如何防止网格几何管理器中的行标记?

时间:2014-07-14 01:56:27

标签: python tkinter

我有一个Tk界面,看起来像这样;

enter image description here

正如您所看到的,我有3个(如果您计算标签,则为4个)列。我希望条目(带有标签)与右侧的按钮不对齐,因为按钮和条目的数量会有所不同,对齐它们看起来会很糟糕。

另外,我使画布跨度为多行,因此条目将保留在画布的左侧,但这会在条目之间产生很大的余量。

我有两个相关的问题;

  • 我应该使用包几何管理器吗?如果是这样,怎么样?
  • 如果网格会这样做,我将如何实施?

这是我的代码;

class Main(tk.Frame):

    w = 600
    h = 600

    def __init__(self,parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)

        self.parent = parent

        ### variables ###
        self.iterations = tk.StringVar()
        self.angle = tk.StringVar()
        self.axiom = tk.StringVar()
        self.rule1 = tk.StringVar()
        self.rule2 = tk.StringVar()
        self.rule3 = tk.StringVar()
        self.rule4 = tk.StringVar()
        self.constants = tk.StringVar()

        ### Labels ###
        tk.Label(self, text="Iterations").grid(column=0,row=0)
        tk.Label(self, text="angle").grid(column=0,row=1)
        tk.Label(self, text="axiom").grid(column=0,row=2)
        tk.Label(self, text="rule1").grid(column=0,row=3)
        tk.Label(self, text="rule2").grid(column=0, row=4)
        tk.Label(self, text="rule3").grid(column=0, row=5)
        tk.Label(self, text="rule4").grid(column=0, row=6)
        tk.Label(self, text="constants").grid(column=0, row=7)


        ### Entries ###
        tk.Entry(self, textvariable=self.iterations).grid(column=1,row=0)
        tk.Entry(self, textvariable=self.angle).grid(column=1,row=1)
        tk.Entry(self, textvariable=self.axiom).grid(column=1,row=2)
        tk.Entry(self, textvariable=self.rule1).grid(column=1,row=3)
        tk.Entry(self, textvariable=self.rule2).grid(column=1, row=4)
        tk.Entry(self, textvariable=self.rule3).grid(column=1, row=5)
        tk.Entry(self, textvariable=self.rule4).grid(column=1, row=6)
        tk.Entry(self, textvariable=self.constants).grid(column=1, row=7)

        ### Render Button ###
        tk.Button(self, text="render", command=self.render_image).grid(column=0, row=8, columnspan=2)

        ### Preset Buttons ###
        tk.Button(self, text="Koch Snowflake", command=self.snowflake).grid(column=3, row=0)
        tk.Button(self, text="Custom 1", command=self.custom1).grid(column=3, row=1)

        ### Canvas ###
        self.cv = tk.Canvas(self, width=self.w, height=self.h, bg='white')
        self.cv.grid(column=2, rowspan=9, row=0)

        self.grid()

1 个答案:

答案 0 :(得分:0)

在列中使用框架,然后您可以在每个框架中使用不同的管理器网格/包/位置

除此之外,您可以使用不同的按钮获得少量帧并显示/隐藏帧以替换所有按钮。 (grid_forget / pack_forget / place_forget)。