这是我在这个简单的GUI中使用的代码:
def main():
DOCROOT_LABEL = 'Document root:'
PORT_LABEL = 'Listen on port:'
APPNAME = 'PIPlayD'
TEXT_HEIGHT = 1
MF_WIDTH = 400
MF_HEIGHT = 150
# Loading main window
win = Tkinter.Tk(baseName = APPNAME)
win.wm_title(APPNAME)
# Setting main frame
f = Tkinter.Frame(win, width = MF_WIDTH, height = MF_HEIGHT)
f.pack_propagate(False)
# Setting labels
label_DocRoot = Tkinter.Label(f,
width = len(DOCROOT_LABEL),
anchor = Tkinter.W,
justify = Tkinter.LEFT,
text = DOCROOT_LABEL)
label_Port = Tkinter.Label(f,
width = len(PORT_LABEL),
anchor = Tkinter.W,
justify = Tkinter.LEFT,
text = PORT_LABEL)
# Setting text areas
text_DR = Tkinter.Text(f, height = TEXT_HEIGHT)
text_P = Tkinter.Text(f, height = TEXT_HEIGHT)
f.pack()
label_DocRoot.pack()
text_DR.pack()
label_Port.pack()
text_P.pack()
win.mainloop()
Run Code Online (Sandbox Code Playgroud)
我已经将它设置为将字符串的长度作为其宽度,我已将其锚属性设置为W并证明它离开(尽管据我所知,证明不应该是必要的,因为它控制了如何当发生回车时它会对齐).
现在,我注意到如果我len(DOCROOT_LABEL改为MF_WIDTH,为了匹配框架宽度,它会正确对齐.
那么,如何对齐哪个宽度与框架内父元素宽度不匹配的小部件?
如果我正确理解了您的问题,您需要将标签放在框架的左侧.你的方法的问题是你只是在标签内对齐文本,而不是标签本身,它们比框架小得多 - 通过设置background不同的颜色可以很容易地看出这一点.
您可以使用以下fill参数来解决此问题:label_DocRoot.pack(fill="x").但是,我建议使用不同的布局管理器,例如更灵活的grid方法.
f.grid()
label_DocRoot.grid(row=1, column=1, sticky=Tkinter.W)
text_DR.grid(row=2, column=1, sticky=Tkinter.W)
label_Port.grid(row=3, column=1, sticky=Tkinter.W)
text_P.grid(row=4, column=1, sticky=Tkinter.W)
Run Code Online (Sandbox Code Playgroud)
通过更改值row,column您还可以将标签放在文本字段的同一行和左侧,这看起来更好.
另请注意,Text您应该将Entry窗口小部件用于单行文本.
| 归档时间: |
|
| 查看次数: |
8725 次 |
| 最近记录: |