我并没有完全实现自己的理想目标。
但是基本上满足需求,总结几点技巧:
1、column和columnspan是核心
你可以column=6,但中间没有3,4,5
2、每个控件应该默认这两个属性sticky=W,pady=10
左对齐和上间距,在这两个基础上排布,容易实现对齐。
3、在前两条的基础之上,再设置width和padx微调一下。
下面是我在做采集器的时候做的界面,除了红框那里有点宽,其他都调整的可以。
代码如下:
from tkinter import * root = Tk() root.title(u'采集器') root.geometry('900x500+100+100') # 数据库 lbl_db = Label(root,text="数据库:") str_db = StringVar(value='db/code8cn-java.db') txt_db = Entry(root,textvariable=str_db,width=30) lbl_db.grid(row=0,column=0,sticky=W,pady=10,padx=30) txt_db.grid(row=0,column=1,sticky=W,pady=10) # 规则 frm_Reg = LabelFrame(root,text=u'单页') frm_Reg.grid(row=1,column=0,columnspan=8,pady=10,padx=30,ipadx=10,ipady=10) lbl_title = Label(frm_Reg,text=u'标题规则:') lbl_title.grid(row=0,column=0,pady=10,padx=10) str_title = StringVar(value=u'<div class="title"') txt_title = Entry(frm_Reg,textvariable=str_title,width=100) txt_title.grid(row=0,column=1,pady=10,padx=10) lbl_content = Label(frm_Reg,text=u'内容规则:') lbl_content.grid(row=1,column=0,pady=10) str_content = StringVar(value=u'<div class="content"') txt_content = Entry(frm_Reg,textvariable=str_content,width=100) txt_content.grid(row=1,column=1,pady=10) # 是否翻译 int_check = IntVar() chk_Trans = Checkbutton(root,text=u'是否翻译标题',variable=int_check) chk_Trans.grid(row=2,column=0,sticky=W,pady=10,padx=25) # 单页采集 lbl_sigle = Label(root,text=u"单页采集:") str_sigle = StringVar(value=u'https://www.code8cn.com/hello.html') txt_sigle = Entry(root,textvariable=str_sigle,width=100) lbl_sigle.grid(row=3,column=0,pady=10,sticky=W,padx=30) txt_sigle.grid(row=3,column=1,sticky=W) btn_sigle = Button(root,text=u'单页采集') btn_sigle.grid(row=4,column=1,pady=10,sticky=E) # 列表采集 lbl_list = Label(root,text=u"列表页采集:") str_list = StringVar(value=u'https://www.code8cn.com/list.html') txt_list = Entry(root,textvariable=str_list,width=100) lbl_list.grid(row=5,column=0,sticky=W,padx=30) txt_list.grid(row=5,column=1,pady=10,sticky=W) # 翻页规则 lbl_page = Label(root,text=u"翻页规则:") str_page = StringVar(value=u'https://www.code8cn.com/list.html?page=1') txt_page = Entry(root,textvariable=str_page,width=100) lbl_page.grid(row=6,column=0,sticky=W,padx=30) txt_page.grid(row=6,column=1,pady=10,sticky=W) btn_list = Button(root,text=u'列表页采集') btn_list.grid(row=7,column=1,pady=10,sticky=E) # mainloop()