如何在Tkinter中定位?

时间:2017-06-07 08:17:04

标签: python tkinter

我是Tkinter的新人,我想创建一个"形式" (我真的不知道如何调用它)写入数据库。我完成了它,但由于布局我很沮丧。

我有这个代码来制作"形式":

    self.parent.title("Pozi")
    self.pack(fill = BOTH, expand=True)

    frame1 = Frame(self)
    frame1.pack(side = LEFT)

    lbl1 = Label(frame1, text = "ĂtadĂł kártyája", width = 15)
    lbl1.pack(side = TOP, padx=5)

    atadoText = StringVar() 
    atadoText.set('')
    self.entry1 = Entry(frame1, textvariable=atadoText)
    self.entry1.pack(side = BOTTOM, padx=5)
    atadoText.trace('w',atado_enter)
    self.atadoText = atadoText  
    self.entry1.focus()

    frame2 = Frame(self)
    frame2.pack(side = RIGHT)

    lbl2 = Label(frame2, text = "ĂtvevĹ‘ kártyája", width = 15)
    lbl2.pack(side = TOP, padx=5, expand=True)

    atvevoText = StringVar()
    atvevoText.set('')
    self.entry2 = Entry(frame2, textvariable = atvevoText)
    self.entry2.pack(side = BOTTOM, padx=5)
    atvevoText.trace('w', atvevo_enter)
    self.atvevoText = atvevoText

    frame3 = Frame(self)
    frame3.pack(side = RIGHT)

    lbl3 = Label(frame3, text = "ĂrvevĹ‘ kártyája", width = 15)
    lbl3.pack(side = TOP, padx=5, expand=True)

    lblText = StringVar()
    lblText.set('')
    self.entry3 = Entry(frame3, textvariable = lblText)
    self.entry3.pack(side = TOP, padx=5, expand=True)
    lblText.trace('w', lbl_count)
    self.lblText = lblText


    lbl4 = Label(frame3, text = "Title", width = 15)
    lbl4.pack(side = TOP, anchor=N, padx=5, pady=5)

    self.txt = Text(frame3)
    self.txt.pack(fill = BOTH, side = TOP, padx=5, pady=5, expand=True) 

它创建了这样的东西:     enter image description here

我希望看起来像这样。但我赞成每一个想法: enter image description here

1 个答案:

答案 0 :(得分:1)

首先,不要害怕谷歌搜索pack manager,特别是关于packer algorithm,然后尝试理解为什么你得到你得到的。

由于pack逻辑的相对性,初学者控制小部件的水平和垂直定位并不是一件容易的事。因此,请记住“分而治之”的原则,并将您的程序布局视为一组块,我们将窗口小部件按水平顺序或垂直顺序放置,而不会混合。

考虑你的布局,它看起来像: layout

每个红色区块都是Frame小部件+ Root(或“主”Frame,可随意创建一个),只需一个下订单。

要表示类似这样的内容,请尝试以下代码段:

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk

root = tk.Tk()

frame1 = tk.Frame()
frame1.pack()

for _ in range(2):
    i_frame = tk.Frame(frame1)

    label = tk.Label(i_frame, text='Sample%d' % _)
    label.pack(padx=200)

    entry = tk.Entry(i_frame)
    entry.pack(padx=200)

    i_frame.pack(side='left', ipady=25)

frame2 = tk.Frame()
frame2.pack()

label = tk.Label(frame2, text='Sample3')
label.pack()

entry = tk.Entry(frame2)
entry.pack()

label = tk.Label(frame2, text='Title', width=15)
label.pack()

txt = tk.Text(frame2)
txt.pack()

root.mainloop()

另外,请记住,有grid经理!使用此管理器,您可以将布局视为表格,因此也可以尝试一下!