1. 位置和大小设置
grid设置位置, columnconfigure, rowconfigure设置大小
2. Lable 示例
#!/usr/bin/env python3
import sys
import tkinter
import tkinter.ttk
def guiInit():
top = tkinter.Tk()
# 窗口大小和位置 WxH+X+Y
# 窗口大小 宽800, 高480
# 窗口位置 距左边200, 距上边100
top.geometry('800x480+200+100')
label1 = tkinter.ttk.Label(top, width=10, text='label1', relief='raised')
label2 = tkinter.ttk.Label(top, width=10, text='label2', relief='raised')
label3 = tkinter.ttk.Label(top, width=10, text='label3', relief='raised')
label4 = tkinter.ttk.Label(top, width=10, text='label4', relief='raised')
label5 = tkinter.ttk.Label(top, width=10, text='label5', relief='raised')
label6 = tkinter.ttk.Label(top, width=10, text='label6', relief='raised')
'''
指定位置
YourWidget.grip(row=N, column=N, sticky='nsew',
rowspan=N, columnspan=N, padx=N, pady=N)
指定大小: weight表示权重如果所有单元格全为1, 则表示等大小
weight=0: YourWidget的实际大小,固定大小
YourWidget.rowconfigure(N, weight=1)
YourWidget.columnconfigure(N, weight=1)
'''
label1.grid(row=0,column=0, sticky='nsew')
label2.grid(row=0,column=1, sticky='nsew')
label5.grid(row=0,column=2, sticky='nsew', rowspan=2, padx=5, pady=5)
label3.grid(row=1,column=0, sticky='nsew')
label4.grid(row=1,column=1, sticky='nsew')
label6.grid(row=2,column=0, sticky='nsew', columnspan=3)
'''
top.rowconfigure("all", weight=1)
top.columnconfigure("all", weight=1)
'''
top.rowconfigure(0, weight=3)
top.rowconfigure(1, weight=1)
top.rowconfigure(2, weight=0)
#top.columnconfigure([0, 1], weight=1)
top.columnconfigure(0, weight=3)
top.columnconfigure(1, weight=1)
top.columnconfigure(2, weight=0)
top.mainloop()
def main():
guiInit()
if __name__ == '__main__' :
main()
3. TreeView 示例
#!/usr/bin/env python3
import sys
import tkinter
import tkinter.ttk
import pprint
## 0: grid geometry
## 1: pack geometry
bgrid = True
def guiInit():
col = []
datav = []
data = {}
for i in range(1, 100):
col.append("col" + str(i))
datav.append("data" + str(i) )
for i in range(1, 100):
data["line"+str(i)] = datav
top = tkinter.Tk()
# 窗口大小和位置 WxH+X+Y
# 窗口大小 宽800, 高480
# 窗口位置 距左边200, 距上边100
top.geometry('800x480+200+100')
tree = tkinter.ttk.Treeview(top, columns = col)
tree.heading('#0', text="city")
for colv in col:
tree.column(colv, width=150, anchor='w')
tree.heading(colv, text=colv)
for k,v in data.items():
itm = tree.insert("", "end", text=k, values=v)
#pprint.pprint(tree.item(itm))
yscrollbar = tkinter.ttk.Scrollbar(top, orient=tkinter.VERTICAL, command=tree.yview)
xscrollbar = tkinter.ttk.Scrollbar(top, orient=tkinter.HORIZONTAL, command=tree.xview)
tree.configure(yscrollcommand = yscrollbar.set)
tree.configure(xscrollcommand = xscrollbar.set)
if bgrid:
## 1. 设置位置
tree.grid(row=0, column=0, sticky='nsew')
yscrollbar.grid(row=0, column=1, sticky='nsew')
xscrollbar.grid(row=1, column=0, sticky='nsew')
## 2. 设置大小
## tree@(0, 0):r.weight=1, c.weight=1
## 表格, row.weight = 1 高度随着窗口动态变化
## 表格, column.weight = 1 宽度随着窗口动态变化
top.rowconfigure(0, weight=1)
top.columnconfigure(0, weight=1)
## xball@(1, 0): r.weight=0, c.weight=1
## 横向滚动条, row.weight = 0 高度不变
## 横向滚动条, column.weight = 1 宽度随着窗口动态变化
top.rowconfigure(1, weight=0)
## yball@(0, 1):r.weight=1, c.weight=0
## 竖向滚动条, row.weight = 1 高度随着窗口动态变化
## 竖向滚动条, column.weight = 0 宽度不变
top.columnconfigure(1, weight=0)
else:
yscrollbar.pack(side='right', fill='y')
xscrollbar.pack(side='bottom', fill='x')
tree.pack(side='top', expand = 1, fill = 'both')
top.mainloop()
def main():
guiInit()
if __name__ == '__main__' :
main()