python tkinter grid 布局

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值