3

到目前为止,这是我的代码:

master = Tk()
Label(master, text="Input:").grid(row=0)

e1 = Entry(master, width = 100)
e1.grid(row=0, column=1)

Button(master, text='Q', command=q_pressed).grid(row=3, column=2,
                                                sticky=W, padx = 4, pady=4)

Button(master, text='C', command =c_input).grid(row=3, column=1,
                                                sticky=W, padx = 0, pady=4)

Button(master, text='Confirm', command=parse_input).grid(row=3, column=0,
                                                sticky=W, padx = 4, pady=4)

我正在尝试使“Q”按钮位于“C”按钮旁边(就像“C”如何位于“确认”按钮旁边),但它却将其放置在 Entry 小部件结束的位置。

我知道这是一个网格管理问题。如何设置布局,使 row = 0,具有文本和条目小部件,并且 row=3 具有其自己的独立列 (0,1,2) 用于按钮?

4

3 回答 3

4

您的问题是Entry e1很长并且包含 100 个字符,但它只跨越一列。您可以使用来定义命令中columnspan使用的列数。以下示例对我有用。自己决定,什么是合理的价值。e1gridcolumnspan = 30columnspan

from Tkinter import *
master = Tk()
Label(master, text="Input:").grid(row=0)

e1 = Entry(master, width = 100)
e1.grid(row=0, column=1, columnspan=30)

Button(master, text='Q').grid(row=3, column=2)

Button(master, text='C').grid(row=3, column=1)

Button(master, text='Confirm').grid(row=3, column=0)
mainloop()
于 2013-01-01T21:45:38.857 回答
2

执行您想要的布局的方法可能不止一种,我选择提供一种干净的方法。您的Entry小部件在第一行的第二列中占据了很大的水平空间,因此将小部件放在下一行的下方会给您带来麻烦。由于您知道它下方将有 3 个按钮,因此您可以使其Entry跨越两列(columnspan=2在对其进行网格化时)并在对下一行进行网格化时使用它。但我更喜欢一种不同的方法,这也会产生更好的整体布局。您想要的是Frame在需要两列的第二行中对 a 进行网格化(因为在它上面的行中您有两个小部件)。然后你在这个新的Frame.

这会将您的代码变成:

import Tkinter

master = Tkinter.Tk()

Tkinter.Label(master, text="Input:").grid(row=0, column=0)
Tkinter.Entry(master, width = 100).grid(row=0, column=1)

frame = Tkinter.Frame()
frame.grid(row=1, column=0, columnspan=2, sticky='w')
Tkinter.Button(frame, text='Confirm').grid(row=0, column=0, sticky='w')
Tkinter.Button(frame, text='C').grid(row=0, column=1, sticky='w')
Tkinter.Button(frame, text='Q').grid(row=0, column=2, sticky='w')

master.mainloop()
于 2013-01-01T21:59:31.570 回答
0

在此处输入代码{ master = Tk() Label(master, text="Input:" ).grid(row=0)

e1 = Entry(master, width=100)
e1.grid(row=0, column=1, columnspan=10)

Button(master, text='Q', width=5, command=q_pressed).grid(row=3, column=1, padx=0, ipadx=5, pady=4, sticky=E)

Button(master, text='C', width=5, command =c_input).grid(row=3, column=1, padx=0, ipadx=5, pady=4, sticky=W)

Button(master, text='Confirm', width=10, command=parse_input).grid(row=3, column=0, padx=0, pady=4, sticky=W)

mainloop()}

由于您需要 100 个字符作为输入字符串,因此我将单元格/列宽基于 10 以进行简单的数学除法。将我的列跨度设置为 10。我摆脱了 padx,因为它与边框宽度有关,并使用了与内部文本宽度有关的 ipadx。将条目设置为 10 列宽,每列 10 个字符。使用“输入”文本作为 1 列。这将允许我使用 10 个字符或一列作为文本“确认”,并且我可以通过使用 width=5 将按钮“c”和“q”设为 5 个字符宽,将第 1 列分成两半。然后使用 justfy 将 "c" West 和 "q" East。

有很多方法,这在我看来是最简单的。

于 2015-10-07T14:46:19.643 回答