布局管理
label frame widget
# -*- coding:utf-8 -*-
import tkinter as tk
from tkinter import ttk
win = tk.Tk()
win.title("Python GUI")
labelFrame = ttk.LabelFrame(win, text=' Labels in a Frame ')
labelFrame.grid(column=0, row=0)
ttk.Label(labelFrame, text="Label1").grid(column=0, row=0)
ttk.Label(labelFrame, text="Label2").grid(column=1, row=0)
ttk.Label(labelFrame, text="Label3").grid(column=2, row=0)
win.mainloop()
ttk.Label(labelFrame, text="Label1").grid(column=0, row=0)
ttk.Label(labelFrame, text="Label2").grid(column=0, row=1)
ttk.Label(labelFrame, text="Label3").grid(column=0, row=2)
add space around widgets
labelFrame.grid(column=0, row=0, padx=20, pady=40)
for child in labelFrame.winfo_children():
child.grid_configure(padx=8, pady=4)
grid_configure()方法可以允许我们修改UI元素。
How widgets dynamically expand the GUI
scr = scrolledtext.ScrolledText(win, width=scrolW, height=scrolH, wrap=tk.WORD)
scr.grid(column=0, sticky='WE', row=6, columnspan=3)
scr.grid(column=0, row=6, columnspan=3)
通过将框架嵌入框架来对齐GUI小部件
import tkinter as tk
from tkinter import ttk
win = tk.Tk()
win.title("Python GUI")
monty = ttk.LabelFrame(win, text=' Monty Python ')
monty.grid(column=0, row=0)
aLabel = ttk.Label(monty, text="Enter a name:")
aLabel.grid(column=0, row=0, sticky='W')
name = tk.StringVar()
nameEntered = ttk.Entry(monty, width=12, textvariable=name)
nameEntered.grid(column=0, row=1, sticky=tk.W)
win.mainloop()
创建menu bars
from tkinter import Menu
import tkinter as tk
win = tk.Tk()
win.title("Python GUI")
menuBar = Menu(win)
win.config(menu=menuBar)
fileMenu = Menu(menuBar, tearoff=0)
fileMenu.add_command(label="New")
fileMenu.add_separator()
fileMenu.add_command(label="Exit")
menuBar.add_cascade(label="File", menu=fileMenu)
win.mainloop()
def _quit():
win.quit()
win.destroy()
exit()
fileMenu.add_command(label="Exit", command=_quit)
点击Exit,应用结束
创建tabbed widgets
import tkinter as tk
from tkinter import ttk
win = tk.Tk()
win.title("Python GUI")
tabControl = ttk.Notebook(win)
tab1 = ttk.Frame(tabControl)
tabControl.add(tab1, text="Tab 1")
tabControl.pack(expand=1, fill="both")
tab2 = ttk.Frame(tabControl)
tabControl.add(tab2, text="Tab 2")
monty = ttk.LabelFrame(tab1, text=' Monty Python ')
monty.grid(column=0, row=0, padx=8, pady=4)
ttk.Label(monty, text="Enter a name:").grid(column=0, row=0, sticky='W')
win.mainloop()
网络布局管理器
如果不指名row的值,tkinter会自动完成加1操作。