最简单的一个空窗口:
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,不中意之处请见谅!