如何在Tkinter中定位?

2024-05-12 23:05:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: textselftruetopwidthsidelabelpack
1条回答
网友
1楼 · 发布于 2024-05-12 23:05:12

首先,不要害怕在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经理!使用此管理器,您可以将布局视为一个表,因此也可以尝试一下!你知道吗

相关问题 更多 >