Python Tkinter实例详解
Tkinter概述
Tkinter是Python的标准GUI库,提供了一套跨平台的GUI工具包。它包含了多个控件,如Button、Canvas、Checkbutton、Entry、Frame、Label、Listbox、Menu、Menubutton、Message、Radiobutton、Scale、Scrollbar、Text、Toplevel等等,可以用于开发各种GUI应用。本文将介绍Tkinter的使用,包括控件的基本用法、事件绑定、布局管理、对话框及其他用法等。
安装Tkinter
Tkinter是Python的标准库,通常情况下不需要另行安装。如果你使用的是Python 2.x版本,你需要使用Tkinter的Tkinter模块;如果你使用的是Python 3.x版本,你需要使用Tkinter的tkinter模块。在安装Python后,你可以在Python的安装目录中找到Tkinter/tkinter的相应模块。
界面设计
在使用Tkinter开发GUI应用前,需要先进行界面设计。可以使用Glade、QtDesigner等可视化界面设计工具,也可以手动编写代码。Tkinter提供多种布局管理器,常用的布局管理器有:
- Pack布局管理器
- Grid布局管理器
- Place布局管理器
Pack布局管理器
Pack布局管理器非常简单,可以将小部件依次打包(排列)在一个不可见的容器中。它默认都是从上到下、从左到右排列,可以通过side选项来控制布局方向,side可以取值为"top"、"bottom"、"left"、"right"。示例代码如下:
import tkinter as tk
root = tk.Tk()
tk.Button(root, text="前往github", command=open_github).pack()
tk.Button(root, text="退出程序", command=quit_program).pack(side="bottom")
root.mainloop()
Grid布局管理器
Grid布局管理器可以将容器划分成网格,把控件放到指定的行和列中。示例代码如下:
import tkinter as tk
root = tk.Tk()
tk.Label(root, text="First Name").grid(row=0)
tk.Label(root, text="Last Name").grid(row=1)
tk.Entry(root).grid(row=0, column=1)
tk.Entry(root).grid(row=1, column=1)
root.mainloop()
Place布局管理器
Place布局管理器是最基本、也是最自由的管理器。可以通过指定控件的坐标,来控制控件的位置和大小。示例代码如下:
import tkinter as tk
root = tk.Tk()
tk.Button(root, text="Quit", command=root.quit).place(x=50, y=50)
root.mainloop()
控件
Tkinter提供了多种控件,常用的控件有:
- Button
- Canvas
- Checkbutton
- Entry
- Frame
- Label
- Listbox
- Menu
- Menubutton
- Message
- Radiobutton
- Scale
- Scrollbar
- Text
- Toplevel
以下是对其中几个控件的详细介绍。
Button控件
Button控件是Tkinter中最基本的控件之一,它通常用作触发事件的按钮。可以设置Button的text属性来改变按钮上的文本;可以设置Button的command属性来绑定按钮事件。如下是一个Button控件的示例:
import tkinter as tk
def hello():
print("Hello")
root = tk.Tk()
tk.Button(root, text="Hello", command=hello).pack()
root.mainloop()
Label控件
Label控件用来显示文本或者图像,可以通过设置Label的text属性来改变文本内容。如下是一个Label控件的示例:
import tkinter as tk
root = tk.Tk()
tk.Label(root, text="Hello world!").pack()
root.mainloop()
Entry控件
Entry控件用来输入单行文本,可以设置Entry的show属性为"*"来实现密码输入的效果。如下是一个Entry控件的示例:
import tkinter as tk
root = tk.Tk()
entry = tk.Entry(root, show="*")
entry.pack()
root.mainloop()
事件绑定
Tkinter支持多种事件绑定,常用的事件有:
- ButtonRelease
- ButtonPress
- Double-ButtonPress
- KeyPress
- KeyRelease
- Motion
- Enter
- Leave
绑定事件可以使得程序能够响应用户的操作。如下是一个Button控件,并给它绑定了ButtonPress事件的示例:
import tkinter as tk
def hello():
print("Hello")
root = tk.Tk()
button = tk.Button(root, text="Hello")
button.pack()
button.bind("<ButtonPress>", hello)
root.mainloop()
布局管理
布局管理器是用来控制控件在GUI窗口中的位置和大小的。常用的布局管理器有:
- Pack布局管理器
- Grid布局管理器
- Place布局管理器
以下是对这几种布局管理器的详细介绍。
Pack布局管理器
Pack布局管理器可以将小部件依次打包(排列)在一个不可见的容器中。它默认都是从上到下、从左到右排列,可以通过side选项来控制布局方向。如下是一个Button控件和一个Label控件,它们使用了不同的side选项:
import tkinter as tk
def open_github():
print("https://www.github.com")
def quit_program():
root.quit()
root = tk.Tk()
tk.Button(root, text="前往github", command=open_github).pack()
tk.Button(root, text="退出程序", command=quit_program).pack(side="bottom")
root.mainloop()
Grid布局管理器
Grid布局管理器可以将容器划分成网格,把控件放到指定的行和列中。如下是一个简单的Grid布局管理器的示例:
import tkinter as tk
root = tk.Tk()
tk.Label(root, text="First Name").grid(row=0)
tk.Label(root, text="Last Name").grid(row=1)
tk.Entry(root).grid(row=0, column=1)
tk.Entry(root).grid(row=1, column=1)
root.mainloop()
Place布局管理器
Place布局管理器是最基本、也是最自由的管理器。可以通过指定控件的坐标,来控制控件的位置和大小。如下是一个Place布局管理器的示例:
import tkinter as tk
root = tk.Tk()
tk.Button(root, text="Quit", command=root.quit).place(x=50, y=50)
root.mainloop()
对话框
对话框是用来提示用户进行操作或者显示信息的窗口。Tkinter提供多种对话框,包括:
- message box
- file dialog
- color dialog
以下是对其中两种对话框的详细介绍。
Message box对话框
Message box对话框可以用来显示消息或者询问用户是否进行操作。Tkinter提供了多个message box对话框,包括:
- showinfo
- showwarning
- showerror
- askquestion
- askokcancel
- askyesno
- askretrycancel
如下是一个showinfo对话框的示例:
import tkinter as tk
import tkinter.messagebox as messagebox
root = tk.Tk()
messagebox.showinfo("Title", "This is a message box")
root.mainloop()
File dialog对话框
File dialog对话框可以用来选择文件或者目录。Tkinter提供了多个file dialog对话框,包括:
- askopenfilename
- asksaveasfilename
- askdirectory
如下是一个askopenfilename对话框的示例:
import tkinter as tk
from tkinter.filedialog import askopenfilename
root = tk.Tk()
filename = askopenfilename()
print(filename)
root.mainloop()
示例说明
示例1
以下是一个简单的GUI应用的示例,它包括两个Button控件和一个Label控件。当点击Button控件时,Label控件上的文本将发生变化。
import tkinter as tk
root = tk.Tk()
def hello():
label.config(text="Hello")
def world():
label.config(text="World")
button1 = tk.Button(root, text="Hello", command=hello)
button1.pack(side="left")
button2 = tk.Button(root, text="World", command=world)
button2.pack(side="left")
label = tk.Label(root, text="Hello world!")
label.pack()
root.mainloop()
示例2
以下是一个使用Grid布局管理器布局的GUI应用的示例,它包括一个Button控件和一个Label控件。当点击Button控件时,Label控件上的文本将发生变化。
import tkinter as tk
root = tk.Tk()
def hello():
label.config(text="Hello")
def world():
label.config(text="World")
tk.Button(root, text="Hello", command=hello).grid(row=0, column=0)
tk.Button(root, text="World", command=world).grid(row=0, column=1)
label = tk.Label(root, text="Hello world!")
label.grid(row=1, column=0, columnspan=2)
root.mainloop()
总结
本文介绍了Tkinter的使用,包括控件的基本用法、事件绑定、布局管理、对话框及其他用法等。掌握了本文所述内容,你就可以使用Tkinter开发基本的GUI应用了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python Tkinter实例详解 - Python技术站