Python Tkinter Grid布局技巧总结

我并没有完全实现自己的理想目标。

但是基本上满足需求,总结几点技巧:
1、column和columnspan是核心
你可以column=6,但中间没有3,4,5
2、每个控件应该默认这两个属性sticky=W,pady=10
左对齐和上间距,在这两个基础上排布,容易实现对齐。
3、在前两条的基础之上,再设置width和padx微调一下。

下面是我在做采集器的时候做的界面,除了红框那里有点宽,其他都调整的可以。

Python Tkinter Grid布局技巧总结

代码如下:

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()