menu 菜单
import tkinter as tk
root = tk.Tk()
root.title('主窗口')
root.geometry('400x300')
root.protocol('WM_DELETE_WINDOW', root.iconify)
def exit():
root.destroy()
menubar = tk.Menu(root)
# 菜单栏下拉显示的菜单
filemenu = tk.Menu(menubar)
for item in ['新建', '打开', '保存', '另存为']:
filemenu.add_command(label = item)
filemenu.add_command(label = '退出', command = exit)
editmenu = tk.Menu(menubar)
for item in ['复制', '粘贴', '剪切']:
editmenu.add_command(label = item)
# 在菜单栏上显示的部分
menubar.add_cascade(label = '文件', menu = filemenu)
menubar.add_cascade(label = '编辑', menu = editmenu)
root['menu'] = menubar
root.mainloop()
frame 框架
import tkinter as tk
root = tk.Tk()
root.title('主框架')
root.geometry('200x100')
# 创建 frame
frm = tk.Frame(root)
frm.pack()
# 在 frm 上创建两个 frame, 一个在左, 一个在右
frm_right = tk.Frame(frm)
frm_left = tk.Frame(frm)
frm_left.pack(side = 'left')
frm_right.pack(side = 'right')
# 创建两个 label ,分别放在 frm_left 和 frm_right 上
tk.Label(frm_left, text = '在左侧').pack()
tk.Label(frm_right, text = '在右侧').pack()
root.mainloop()
布局
pack布局
import tkinter as tk
root = tk.Tk()
root.title('主窗口')
root.geometry('400x300')
tk.Label(root, text = '1').pack(side = 'top')
tk.Label(root, text = '2').pack(side = 'left')
tk.Label(root, text = '3').pack(side = 'bottom')
tk.Label(root, text = '4').pack(side = 'right')
root.mainloop()
grid布局
import tkinter as tk
root = tk.Tk()
root.title('主窗口')
root.geometry('400x300')
for i in range(3):
for j in range(3):
tk.Label(root, text = i*3+j).grid(row = i, column = j, padx = 10, pady = 10)
root.mainloop()
place 布局
import tkinter as tk
root = tk.Tk()
root.title('主窗口')
root.geometry('400x300')
tk.Label(root, text = "我就在这里 x = 100, y = 150").place(x = 100, y = 150, anchor = 'nw')
root.mainloop()
Combobox符合框
除了可以选择列表项外,还可以输入
import tkinter as tk
from tkinter import ttk,messagebox
root = tk.Tk()
root.title('复合框')
root.geometry('300x300')
strVar = tk.StringVar()
cb = ttk.Combobox(root,textvariable = strVar)
cb.pack(side = 'top')
# 设置可选项
cb['values'] = ['python', 'java', 'C++', 'php']
def click():
messagebox.showinfo(title = '提示', message = strVar.get())
# 单击按钮时,显示复选框里的内容
tk.Button(root, text = '确定', command = click).pack()
root.mainloop()
spinbox 高级输入框
比 entry更高级一些,除了直接输入外,还可以通过点击上下箭头的按钮调节输入内容
import tkinter as tk
from tkinter import messagebox
root = tk.Tk()
root.title('主窗口')
root.geometry('200x200')
int_value_var = tk.IntVar()
sb1 = tk.Spinbox(root, from_ = 0, to = 100, increment = 5, textvariable = int_value_var)
sb1.pack()
def press():
language = sb2.get()
messagebox.showinfo(title = '提示', message = f'你选择了{language}'.format(language = language))
sb2 = tk.Spinbox(root, values = ('phthon', 'java', 'c++', 'php'), command = press)
sb2.pack()
root.mainloop()
filedialog 框架
选择文件,并获得文件的绝对路径
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.title('主窗口')
root.geometry('300x50')
path_var = tk.StringVar()
entry = tk.Entry(root, textvariable = path_var)
entry.place(x = 10, y = 10, anchor = 'nw')
def click():
filetypes = [('文本文件','*.txt'),('python源文件','*.py')]
file_name = filedialog.askopenfilename(title = '选择单个文件',filetypes = filetypes, initialdir = './')
path_var.set(file_name)
tk.Button(root, text = '选择', command = click).place(x = 220, y = 10, anchor = 'nw')
root.mainloop()
选择文件目录
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.title('文件夹对话框')
root.geometry('300x50')
path_var = tk.StringVar()
entry = tk.Entry(root, textvariable = path_var)
entry.place(x = 10, y = 10, anchor = 'nw')
def click():
file_name = filedialog.askdirectory(title = '选择一个文件夹', initialdir = './')
path_var.set(file_name)
tk.Button(root, text = '选择', command = click).place(x = 220, y = 10, anchor = 'nw')
root.mainloop()
获取保存文件的路径
import tkinter as tk
from tkinter import filedialog, messagebox
root = tk.Tk()
root.title('文件对话框')
root.geometry('300x50')
path_var = tk.StringVar()
entry = tk.Entry(root, textvariable = path_var)
entry.place(x = 20, y = 20, anchor = 'w')
def click():
filetypes = [('文本文件','*.txt'),('python 源文件','*.py')]
file_name = filedialog.asksaveasfilename(title = '保存文件', filetypes = filetypes, initialdir = './')
path_var.set(file_name)
tk.Button(root, text = '选择', command = click).place(x = 220, y = 5, anchor = 'nw')
root.mainloop()
LabelFrame控件
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title('labelframe')
root.geometry('300x200')
lf = ttk.Labelframe(root, text = '请选择教程', padding = 20)
lf.pack()
language_lst = ['python', 'java', 'php', 'go']
i = 0
intVar = tk.IntVar()
for language in language_lst:
tk.Radiobutton(lf,text = language, value = i, variable = intVar).pack(side = 'left')
i += 1
root.mainloop()
panedwindow容器
import tkinter as tk
from tkinter import *
root = tk.Tk()
root.title('PanedWindow')
root.geometry('600x600')
m1 = PanedWindow(root)
m1.pack(fill = BOTH, expand = 1)
left = Label(m1, text = '标签1', bg = 'yellow', width = 20)
m1.add(left)
m2 = PanedWindow(orient = VERTICAL)
m1.add(m2)
top = Label(m2, text = '标签 2', bg = 'yellow', height = 20)
m2.add(top)
bottom = Label(m2, text = '标签 3', bg = 'red')
m2.add(bottom)
root.mainloop()