我试图让三个按钮的底行均匀分布,但由于我使用side="left"
和side="right"
,其他按钮最终位于中间。
示例代码: import tkinter as tki
class App(object):
def __init__(self):
self.root = tki.Tk()
self.root.config(bg="white")
self.root.geometry("400x300")
top_frm = tki.Frame(self.root).pack()
T = tki.Text(top_frm, height=2, width=30)
T.pack()
T.insert(tki.END, "Just a text Widget\nin two lines\n")
mdl_frm = tki.Frame(self.root, width="400").pack(fill="both",expand=True)
lbut = tki.Button(mdl_frm, text='Left button').pack(side="left")
rbut = tki.Button(mdl_frm, text='right button').pack(side="right")
bottom_frm = tki.Frame(self.root).pack(side="bottom",fill="x",expand=False)
btn_frm_r = tki.Frame(bottom_frm).pack(side="right",fill="x")
btn_frm_c = tki.Frame(bottom_frm).pack(side="right",fill="x")
btn_frm_l = tki.Frame(bottom_frm).pack(side="right",fill="x")
button1 = tki.Button(btn_frm_r,text='Bottom button 1').pack()
button2 = tki.Button(btn_frm_c,text='Bottom button 2').pack()
button3 = tki.Button(btn_frm_l,text='Bottom button 3').pack()
app = App()
#launch the app
app.root.mainloop()
我尝试将“左按钮”和“右按钮”放在一个框架中。
我在某处读到了使用side
声明的时候,当某个地方被赋予一个区域时,它会完全控制该区域,因此我尝试先声明btm_frm
帧并使用side="bottom"
有什么想法吗?
答案 0 :(得分:2)
.pack()
会返回None
,因此您无法.pack()
并在一行中分配变量。
此外,我建议您在将其他物体放入框架后包装框架
最后,我建议您使用self.
作为您的类属性;如果以后需要访问它们,你会发现它很有用。
import tkinter as tki
class App(object):
def __init__(self):
self.root = tki.Tk()
self.root.config(bg="white")
self.root.geometry("400x300")
self.top_frm = tki.Frame(self.root)
self.top_frm.pack()
self.T = tki.Text(self.top_frm, height=2, width=30)
self.T.pack()
self.T.insert(tki.END, "Just a text Widget\nin two lines\n")
self.mdl_frm = tki.Frame(self.root, width="400")
self.mdl_frm.pack(fill="both",expand=True)
self.lbut = tki.Button(self.mdl_frm, text='Left button')
self.lbut.pack(side="left")
self.rbut = tki.Button(self.mdl_frm, text='right button')
self.rbut.pack(side="right")
self.bottom_frm = tki.Frame(self.root)
self.btn_frm_r = tki.Frame(self.bottom_frm)
self.btn_frm_r.pack(side="right",fill="x")
self.btn_frm_c = tki.Frame(self.bottom_frm)
self.btn_frm_c.pack(side="right",fill="x")
self.btn_frm_l = tki.Frame(self.bottom_frm)
self.btn_frm_l.pack(side="right",fill="x")
self.button1 = tki.Button(self.btn_frm_r,text='Bottom button 1')
self.button1.pack()
self.button2 = tki.Button(self.btn_frm_c,text='Bottom button 2')
self.button2.pack()
self.button3 = tki.Button(self.btn_frm_l,text='Bottom button 3')
self.button3.pack()
self.bottom_frm.pack(side="bottom",fill="x",expand=False)
app = App()
#launch the app
app.root.mainloop()
答案 1 :(得分:2)
使用side='left'
或side='right'
作为按钮,因为您希望它们在其包含的框架内从左向右移动。
button1 = tki.Button(btn_frm_r,text='Bottom button 1').pack(side="left")
button2 = tki.Button(btn_frm_c,text='Bottom button 2').pack(side="left")
button3 = tki.Button(btn_frm_l,text='Bottom button 3').pack(side="left")
顺便说一下,如果你要做tki.Button(...).pack(...)
,那么把它分配给一个变量是没有意义的。变量的值始终为None
。
pack
算法的完整说明如下:http://tcl.tk/man/tcl8.5/TkCmd/pack.htm#M26