Tkinter教程之Frame篇

这篇Tkinter教程详细介绍了Frame的使用,包括如何创建不同颜色的Frame作为容器,如何向Frame中添加Widget如Label,以及Tk8.4以后新增的带Title支持的LabelFrame。示例代码展示了如何在Frame中布局控件,以及使用LabelFrame创建带有标题的矩形区域。
'''Tkinter教程之Frame篇'''
#Frame就是屏幕上的一块矩形区域,多是用来作为容器(container)来布局窗体。
'''1.创建Frame'''
# -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
#以不同的颜色区别各个frame
for fm in ['red','blue','yellow','green','white','black']:
    
#注意这个创建Frame的方法与其它创建控件的方法不同,第一个参数不是root
    Frame(height = 20,width = 400,bg = fm).pack()
root.mainloop()
#添加不同颜色的Frame,大小均为20*400
'''2.向Frame中添加Widget'''
# -*- coding: cp936 -*-
from Tkinter import *
root 
= Tk()
fm 
= []
#以不同的颜色区别各个frame
for color in ['red','blue']:
    
#注意这个创建Frame的方法与其它创建控件的方法不同,第一个参数不是root
    fm.append(Frame(height = 200,width = 400,bg = color))
#向下面的Frame中添加一个Label
Label(fm[1],text = 'Hello label').pack()
fm[0].pack()
fm[
1].pack()
root.mainloop()
#Label被添加到下面的Frame中了,而不是root默认的最上方。
#
大部分的方法来自gm,留到后面gm时再介绍
'''3.Tk8.4以后Frame又添加了一类LabelFrame,添加了Title的支持'''
from Tkinter import *
root 
= Tk()
for lf in ['red','blue','yellow']:
    
#可以使用text属性指定Frame的title
    LabelFrame(height = 200,width = 300,text = lf).pack()
root.mainloop()

#author:     jcodeer
#
blog:    jcodeer.cublog.cn
#
email:    jcodeer@126.com
 
Tkinter 是 Python 的标准 GUI 库,基于 Tcl/Tk 工具包封装而成,具有跨平台性、轻量级、开发效率高的特点,适合快速开发原型和小型应用 [^1]。以下是 Tkinter 的详细使用教程。 ### 显示窗口 创建一个简单的 Tkinter 窗口,需要定义窗口和其属性,最后执行 `mainloop` 方法让窗口运行起来。 ```python import tkinter as tk window = tk.Tk() window.title('my window') window.geometry('500x500') # 注意是 x 不是 * window.mainloop() ``` ### 核心组件使用 #### 标签(Label) 标签用来显示文字或图片。 ```python import tkinter as tk root = tk.Tk() label = tk.Label(root, text="Hello, Tkinter!", font=("Arial", 16), bg="lightgray", padx=10, pady=10) label.pack() root.mainloop() ``` #### 按钮(Button) 按钮类似标签,但提供额外的功能,例如鼠标掠过、按下、释放以及键盘操作、事件。 ```python import tkinter as tk def button_clicked(): print("Button clicked!") root = tk.Tk() button = tk.Button(root, text="Click me", command=button_clicked) button.pack() root.mainloop() ``` #### 单行文字域(Entry) 单行文字域用来收集键盘输入。 ```python import tkinter as tk root = tk.Tk() entry = tk.Entry(root) entry.pack() def get_input(): print(entry.get()) button = tk.Button(root, text="Get Input", command=get_input) button.pack() root.mainloop() ``` #### 多行文字区域(Text) 多行文字区域可用来收集(或显示)用户输入的文字。 ```python import tkinter as tk root = tk.Tk() text = tk.Text(root) text.pack() def get_text(): print(text.get("1.0", tk.END)) button = tk.Button(root, text="Get Text", command=get_text) button.pack() root.mainloop() ``` #### 框架(Frame) 框架是包含其他组件的纯容器。 ```python import tkinter as tk root = tk.Tk() frame = tk.Frame(root, bg="lightblue") frame.pack(padx=20, pady=20) label = tk.Label(frame, text="This is inside a frame") label.pack() root.mainloop() ``` #### 选择按钮(Checkbutton) 选择按钮是一组方框,可以选择其中的任意个。 ```python import tkinter as tk root = tk.Tk() var1 = tk.IntVar() var2 = tk.IntVar() checkbutton1 = tk.Checkbutton(root, text="Option 1", variable=var1) checkbutton2 = tk.Checkbutton(root, text="Option 2", variable=var2) checkbutton1.pack() checkbutton2.pack() def show_selection(): print(f"Option 1: {var1.get()}, Option 2: {var2.get()}") button = tk.Button(root, text="Show Selection", command=show_selection) button.pack() root.mainloop() ``` #### 列表框(Listbox) 列表框是一个选项列表,用户可以从中选择。 ```python import tkinter as tk root = tk.Tk() listbox = tk.Listbox(root) listbox.pack() items = ["Item 1", "Item 2", "Item 3"] for item in items: listbox.insert(tk.END, item) def show_selected(): selected_index = listbox.curselection() if selected_index: print(listbox.get(selected_index)) button = tk.Button(root, text="Show Selected", command=show_selected) button.pack() root.mainloop() ``` #### 菜单(Menu) 菜单点下菜单按钮后弹出的一个选项列表,用户可以从中选择。 ```python import tkinter as tk root = tk.Tk() menubar = tk.Menu(root) filemenu = tk.Menu(menubar, tearoff=0) filemenu.add_command(label="Open") filemenu.add_command(label="Save") filemenu.add_separator() filemenu.add_command(label="Exit", command=root.quit) menubar.add_cascade(label="File", menu=filemenu) root.config(menu=menubar) root.mainloop() ``` #### 菜单按钮(Menubutton) 菜单按钮用来包含菜单的组件(有下拉式、层叠式等等)。 ```python import tkinter as tk root = tk.Tk() menubutton = tk.Menubutton(root, text="Menu") menubutton.pack() menu = tk.Menu(menubutton, tearoff=0) menu.add_command(label="Option 1") menu.add_command(label="Option 2") menubutton.config(menu=menu) root.mainloop() ``` #### 消息框(Message) 消息框类似于标签,但可以显示多行文本。 ```python import tkinter as tk root = tk.Tk() message = tk.Message(root, text="This is a multi-line message.\nIt can span multiple lines.") message.pack() root.mainloop() ``` #### 单选按钮(Radiobutton) 单选按钮组按钮,其中只有一个可被“按下”(类似 HTML 中的 radio)。 ```python import tkinter as tk root = tk.Tk() var = tk.StringVar() var.set("Option 1") radiobutton1 = tk.Radiobutton(root, text="Option 1", variable=var, value="Option 1") radiobutton2 = tk.Radiobutton(root, text="Option 2", variable=var, value="Option 2") radiobutton1.pack() radiobutton2.pack() def show_selection(): print(var.get()) button = tk.Button(root, text="Show Selection", command=show_selection) button.pack() root.mainloop() ``` #### 进度条(Scale) 进度条是线性“滑块”组件,可设定起始值和结束值,会显示当前位置的精确值。 ```python import tkinter as tk root = tk.Tk() def show_value(value): print(value) scale = tk.Scale(root, from_=0, to=100, orient=tk.HORIZONTAL, command=show_value) scale.pack() root.mainloop() ``` #### 滚动条(Scrollbar) 滚动条对其支持的组件(文本域、画布、列表框、文本框)提供滚动功能。 ```python import tkinter as tk root = tk.Tk() text = tk.Text(root) scrollbar = tk.Scrollbar(root, command=text.yview) text.config(yscrollcommand=scrollbar.set) text.pack(side=tk.LEFT, fill=tk.Y) scrollbar.pack(side=tk.RIGHT, fill=tk.Y) root.mainloop() ``` #### 顶级(Toplevel) 顶级类似框架,但提供一个独立的窗口容器。 ```python import tkinter as tk root = tk.Tk() def open_new_window(): top = tk.Toplevel(root) label = tk.Label(top, text="This is a new window") label.pack() button = tk.Button(root, text="Open New Window", command=open_new_window) button.pack() root.mainloop() ``` #### 画布(Canvas) 画布提供绘图功能(直线、椭圆、多边形、矩形),可以包含图形或位图。 ```python import tkinter as tk root = tk.Tk() canvas = tk.Canvas(root, width=200, height=200) canvas.pack() canvas.create_line(0, 0, 200, 200) canvas.create_rectangle(50, 50, 150, 150, fill="blue") root.mainloop() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值