Tkinter(二)

270 阅读1分钟

布局管理

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操作。