python tkinter简单窗体常用控件介绍

最简单的一个空窗口:

import tkinter as tk
from tkinter import Tk

if __name__ == '__main__':
    win = Tk()
    # 进入消息循环
    win.mainloop()

 运行后如图所示的空桌面

采用pack实现两层(类grid布局)

import tkinter as tk
from tkinter import *

if __name__ == '__main__':
    win = Tk()
    Label(win, text='测试').pack(side=LEFT)    #靠左侧布局
    tb = Entry(win)
    tb.pack(side=LEFT)
    bt = Button(win, text='测试')
    bt.pack(side=LEFT)

    # 进入消息循环
    win.mainloop()

如果再一步要在第二层(下一行)布局一个listbox,用方向定位就不合适了。试过很多限定位置的方法都不合适。最终想到了frame进行约束。思路是先布置一个上下两层的frame,上图的整体放在上层,listbox放在下层。

import tkinter as tk
from tkinter import *

if __name__ == '__main__':
    win = Tk()
    # 分布frame(pack默认从上向下)
    t_frame = Frame(win)
    t_frame.pack()
    b_frame = Frame(win)
    b_frame.pack(expand=YES, fill=BOTH)

    Label(t_frame, text='测试').pack(side=LEFT)
    tb = Entry(t_frame)
    tb.pack(side=LEFT)
    bt = Button(t_frame, text='测试')
    bt.pack(side=LEFT)

    lb = Listbox(b_frame)
    lb.pack(expand=YES, fill=BOTH)

    # 进入消息循环
    win.mainloop()

这样能够达到目的相对紧凑点的布局

为listbox加上scrollbar

import tkinter as tk
from tkinter import *

if __name__ == '__main__':
    win = Tk()
    t_frame = Frame(win)
    t_frame.pack()
    b_frame = Frame(win)
    b_frame.pack(expand=YES, fill=BOTH)

    Label(t_frame, text='测试').pack(side=LEFT)
    tb = Entry(t_frame)
    tb.pack(side=LEFT)
    bt = Button(t_frame, text='测试')
    bt.pack(side=LEFT)

    # 创建bar,注意父窗口和listbox一致
    bar = Scrollbar(b_frame)
    bar.pack(side=RIGHT, fill=Y)
    # 创建listbox
    lb = Listbox(b_frame)
    # 关联bar和listbox
    lb.configure(yscrollcommand=bar.set)
    bar.configure(command=lb.yview)
    # 布局listbox
    lb.pack(expand=YES, fill=BOTH)

    # 进入消息循环
    win.mainloop()

大功告成!测试下listbox的和bar的合作

可惜聚焦的一直都是第一行,虽然可以lb.insert(0, i)来使得最新的数据在第一行,不过不符合正常的显示逻辑。查阅了资料后,使用lb.see(arg)[参数表示listbox聚焦的行数]和lb.size()-1定位到最后一行。

完美解决!

第一次写blog,不中意之处请见谅!

猜你喜欢

转载自blog.csdn.net/qq_35189715/article/details/81126435