2017-06-07 28 views
0

我是新的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

首先,不要怕使用Google的约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经理!有了这个经理,你可以把布局当作一张桌子,所以也试试吧!

+0

我不确定,你知道“分而治之”的真正意义,但我感谢你的回应。我可以用它解决我的问题。感谢电网经理,我之前没有听说过。 – Daniel