TKinter使用

简单使用

基本框架

import tkinter as tk
# 创建窗口
window = tk.Tk()

# 设置窗口标题
window.title("This is demo")
# 设置窗口尺寸
window.geometry("500x300")  # 设置窗口尺寸 长x宽
# window.resizable(width=False, height=False) # 设置窗口大小无法改变


# 窗口主循环
window.mainloop()
(Label)添加文本显示
import tkinter as tk
# 创建窗口
window = tk.Tk()

# 设置窗口标题
window.title("This is demo")
# 设置窗口尺寸
window.geometry("500x300")  # 设置窗口尺寸 长x宽
##### 新增
l = tk.Label(window, text="This is a demo",bg="green", font=("Arial", 12), width=20, height=3)
l.pack()
#####
# 窗口主循环
window.mainloop()
(Button)添加按钮
import tkinter as tk

# 创建主窗口
window = tk.Tk()

# 设置窗口标题
window.title("This is demo1")
# 设置窗口尺寸
window.geometry("500x300")
##### 变化
var = tk.StringVar()
count = 0
l = tk.Label(window, textvariable=var,bg="green", font=("Arial", 12), width=20, height=3)
l.pack()

def hit_me():
    global count
    count += 1
    var.set(f"you hit me {count}")
    print(count)


b = tk.Button(window, text="hit me", font=("Arial",12), width=10, height=1, command=hit_me)
b.pack()
####
window.mainloop()
(Entry)添加单行文本输入
import tkinter as tk

window = tk.Tk()
window.title("This is demo2")
window.geometry("500x300")

# 显示明文
e1 = tk.Entry(window, show=None, font=("Arial", 14))  
# 显示密文
e2 = tk.Entry(window, show="*", font=("Arial", 14))

e1.pack()
e2.pack()

window.mainloop()

(Text)多行文本区域
import tkinter as tk

window = tk.Tk()

window.title("This is demo3")
window.geometry("500x300")

e = tk.Entry(window, show=None)
e.pack()

def insert_point():
    var = e.get()
    t.insert("insert", var)

def insert_end():
    var = e.get()
    t.insert("end", var)
    # 插入文本后是窗口聚焦到末尾
    t.see("end")

b1 = tk.Button(window, text="insert", width=10, height=1, command=insert_point)
b2 = tk.Button(window, text="insert end", width=10, height=1, command=insert_end)

b1.pack()
b2.pack()

# 创建并放置一个多行文本框text用以显示,指定height=3为文本框是三个字符高度
t = tk.Text(window, height=3)
t.pack()


window.mainloop()
(Listbox)列表框部件
import tkinter as tk


window = tk.Tk()

window.title("This is demo4")
window.geometry("500x300")

var_l = tk.StringVar()
l = tk.Label(window, textvariable=var_l, font=("Arial", 14), width=10, height=3)
l.pack()

def show():
    select = lb.curselection()
    print("select",select, type(select))
    if not select:
        return 
    value = lb.get(select)
    print("value", value, type(value))
    var_l.set(value)


b = tk.Button(window, text="show select", command=show)
b.pack()
##### 新增
var = tk.StringVar()
var.set((1,2,3,4))
lb = tk.Listbox(window, listvariable=var)
'''
插入选项
lb.insert(1, "s1")
lb.insert(2, "s2")
lb.insert("end", "se")
'''
lb.pack()
#####
window.mainloop()
Radiobutton窗口部件

Radiobutton:代表一个变量,它可以有多个值中的一个。点击它将为这个变量设置值,并且清除与这同一变量相关的其它radiobutton

import tkinter as tk

window = tk.Tk()

window.title("radio button")
window.geometry("500x300")

var = tk.StringVar()  # 获取选项值

def select():
    print(f'get {var.get()}')

r1 = tk.Radiobutton(window, text="A",variable=var,value=1,command=select)
r1.pack()
r2 = tk.Radiobutton(window, text="B",variable=var,value=2,command=select)
r2.pack()


window.mainloop()
check button 勾选
import tkinter as tk

window = tk.Tk()

window.title("check button")
window.geometry("500x300")

def check_selection():
    print(f"value {var1.get()}")

var1 = tk.IntVar()
c1 = tk.Checkbutton(window, text="option1", variable=var1, onvalue=1, offvalue=0, command=check_selection)
c1.pack()

window.mainloop()
Scale 滑块部件
import tkinter as tk

window = tk.Tk()

window.title("scale")
window.geometry("500x300")

def scaleValue(v):
    print(f"scale {v}")

s = tk.Scale(window, label="try me", from_=0, to=10, orient=tk.HORIZONTAL, length=200, showvalue=1, \
    tickinterval=2, resolution=0.01, command=scaleValue
    )
s.pack()
window.mainloop()
Canvas 部件

Canvas:画布,提供绘图功能(直线、椭圆、多边形、矩形) 可以包含图形或位图,用来绘制图表和图,创建图形编辑器,实现定制窗口部件。


import tkinter as tk  # 使用Tkinter前需要先导入

# 第1步,实例化object,建立窗口window
window = tk.Tk()

# 第2步,给窗口的可视化起名字
window.title('My Window')

# 第3步,设定窗口的大小(长 * 宽)
window.geometry('500x300')  # 这里的乘是小x

# 第4步,在图形界面上创建 500 * 200 大小的画布并放置各种元素
canvas = tk.Canvas(window, bg='green', height=200, width=500)
# 说明图片位置,并导入图片到画布上
image_file = tk.PhotoImage(file= "pic.gif")  # 图片位置(相对路径,与.py文件同一文件夹下,也可以用绝对路径,需要给定图片具体绝对路径)
image = canvas.create_image(250, 0, anchor='n',image=image_file)        # 图片锚定点(n图片顶端的中间点位置)放在画布(250,0)坐标处
# 定义多边形参数,然后在画布上画出指定图形
x0, y0, x1, y1 = 100, 100, 150, 150
line = canvas.create_line(x0-50, y0-50, x1-50, y1-50)                   # 画直线
oval = canvas.create_oval(x0+120, y0+50, x1+120, y1+50, fill='yellow')  # 画圆 用黄色填充
arc = canvas.create_arc(x0, y0+50, x1, y1+50, start=0, extent=180)      # 画扇形 从0度打开收到180度结束
rect = canvas.create_rectangle(330, 30, 330+20, 30+20)                  # 画矩形正方形
canvas.pack()

# 第6步,触发函数,用来一定指定图形
def moveit():
    canvas.move(rect, 2, 2) # 移动正方形rect(也可以改成其他图形名字用以移动一起图形、元素),按每次(x=2, y=2)步长进行移动

# 第5步,定义一个按钮用来移动指定图形的在画布上的位置
tk.Button(window, text='move item',command=moveit).pack()

# 第7步,主窗口循环显示
window.mainloop()
Menu 菜单条

Menu:菜单条,用来实现下拉和弹出式菜单,点下菜单后弹出的一个选项列表,用户可以从中选择

import tkinter as tk

window = tk.Tk()

window.title("Menu")
window.geometry("500x300")

def job1():
    print("do job1")
# 创建一个菜单栏,这里我们可以把他理解成一个容器,在窗口的上方
menubar = tk.Menu(window)
# 创建一个File菜单项(默认不下拉,下拉内容包括New,Open,Save,Exit功能项)
filemenu = tk.Menu(menubar, tearoff=0)
# 将上面定义的空菜单命名为File,放在菜单栏中,就是装入那个容器中
menubar.add_cascade(label="File", menu=filemenu)


# 在File中加入New、Open、Save等小菜单,即我们平时看到的下拉菜单,每一个小菜单对应命令操作
filemenu.add_command(label="New", command=job1)
filemenu.add_command(label="Open", command=job1)
filemenu.add_command(label="Save", command=job1)
filemenu.add_separator()  # 添加一条分隔线
filemenu.add_command(label="Exit", command=window.quit)
# 创建第二级菜单,即菜单项里面的菜单
submenu = tk.Menu(filemenu)
filemenu.add_cascade(label="Import", menu=submenu)
submenu.add_command(label="do1", command=job1)

# 创建菜单栏完成后,配置让菜单栏menubar显示出来
window.config(menu=menubar)

window.mainloop()
Frame 部件

Frame:框架,用来承载放置其他GUI元素,就是一个容器,是一个在 Windows 上分离小区域的部件, 它能将 Windows 分成不同的区,然后存放不同的其他部件. 同时一个 Frame 上也能再分成两个 Frame, Frame 可以认为是一种容器

import tkinter as tk

window = tk.Tk()

window.title("frame")
window.geometry("500x300")
# 创建一个主frame,长在主window窗口上
frame = tk.Frame(window)
frame.pack()
# 创建第二层框架frame,长在主框架frame上面
frame_l = tk.Frame(frame)
frame_l.pack(side="left")

frame_r = tk.Frame(frame)
frame_r.pack(side="right")


tk.Label(window, text='on the window', bg='red').pack()
tk.Label(frame, text='on the frame', bg='pink').pack()
tk.Label(frame, text='on the frame', bg='pink').pack()
tk.Label(frame_l, text='on the frame_l1', bg='green').pack()
tk.Label(frame_l, text='on the frame_l2', bg='green').pack()
tk.Label(frame_l, text='on the frame_l3', bg='green').pack()
tk.Label(frame_r, text='on the frame_r1', bg='yellow').pack()
tk.Label(frame_r, text='on the frame_r2', bg='yellow').pack()
tk.Label(frame_r, text='on the frame_r3', bg='yellow').pack()

window.mainloop()
messageBox窗口部件

弹出的消息窗口

import tkinter as tk
import tkinter.messagebox
window = tk.Tk()

window.title("messagebox")
window.geometry("500x300")

def hitMe():
    tkinter.messagebox.showinfo(title='Hi', message='你好!')            # 提示信息对话窗
    # tkinter.messagebox.showwarning(title='Hi', message='有警告!')       # 提出警告对话窗
    # tkinter.messagebox.showerror(title='Hi', message='出错了!')         # 提出错误对话窗
    # print(tkinter.messagebox.askquestion(title='Hi', message='你好!'))  # 询问选择对话窗return 'yes', 'no'
    # print(tkinter.messagebox.askyesno(title='Hi', message='你好!'))     # return 'True', 'False'
    # print(tkinter.messagebox.askokcancel(title='Hi', message='你好!'))  # return 'True', 'False'



tk.Button(window, text="hit me", command=hitMe).pack()

window.mainloop()
窗口部件放置的三种方式
grid
import tkinter as tk

window = tk.Tk()

window.title("grid")
window.geometry("500x300")

for i in range(3):
    for j in range(3):
        tk.Label(window, text=1).grid(row=i, column=j, padx=10, pady=10, ipadx=10, ipady=10)

window.mainloop()

以上的代码就是创建一个三行三列的表格,其实 grid 就是用表格的形式定位的。这里的参数 row 为行,colum 为列,padx 就是单元格左右间距,pady 就是单元格上下间距,ipadx是单元格内部元素与单元格的左右间距,ipady是单元格内部元素与单元格的上下间距。

pack
import tkinter as tk  # 使用Tkinter前需要先导入

# 第1步,实例化object,建立窗口window
window = tk.Tk()

# 第2步,给窗口的可视化起名字
window.title('My Window')

# 第3步,设定窗口的大小(长 * 宽)
window.geometry('500x300')  # 这里的乘是小x

# 第4步,pack 放置方法
tk.Label(window, text='P', fg='red').pack(side='top')    # 上
tk.Label(window, text='P', fg='red').pack(side='bottom') # 下
tk.Label(window, text='P', fg='red').pack(side='left')   # 左
tk.Label(window, text='P', fg='red').pack(side='right')  # 右

# 第5步,主窗口循环显示
window.mainloop()
place
import tkinter as tk

window = tk.Tk()

window.title("place")
window.geometry("500x300")

tk.Label(window, text="P", font=("Arial", 20)).place(x=25, y=100, anchor="nw")

window.mainloop()

再接下来我们来看place(), 这个比较容易理解,就是给精确的坐标来定位,如此处给的(50, 100),就是将这个部件放在坐标为(x=50, y=100)的这个位置, 后面的参数 anchor=‘nw’,就是前面所讲的锚定点是西北角。

自定义关闭窗口按钮

window.protocol("WM_BELETE_WINDOW", quit_func)

import tkinter as tk

def quit_new():
	global new_w
	windows.remove(new_w)
	new_w.destroy()
	new_w = None
	
def quit_all():
	for w in windows:
		w.destroy()
	

def new_window():
	global new_w
	if not new_w:
		new_w = tk.Tk()
		windows.insert(0, new_w)
		
		new_w.title("new window")
		new_w.geometry("400x300")
		tk.Label(new_w, text="This is new window", bg="red").pack
		new_w.protocol("WM_DELETE_WINDOW", quit_new)
		new_w.mainloop()

windows=[]
window = tk.Tk()
new_w = None
windows.append(window)

window.title("window")
window.geometry("500x300")

tk.Button(window, text="new window", command=new_window)

window.protocol("WM_DELETE_WINDOW", quit_all)
window.mainloop()

主窗口关闭,子窗口随之关闭

Text用作信息显示框
import tkinter as tk
window = tk.Tk()
window.title("window")
window.geometry("500x300")

def show():
	global count
	count += 1
	t.config(state="normal")  # 设置text可编辑
	t.insert("end", f"{count} This is info\n")
	t.config(state="disabled") # 设置text不可编辑
	t.see("end")  # 使text显示末尾
	
count=0
btn = tk.Button(window, text="show info", command=show)
btn.pack()

t = tk.Text(window, height=7)
t.pack(side="bottom")


window.mainloop()
新建子窗口使用Toplevel

Toplevel 组件用来显示额外的窗口

新创建的窗口不需要使用mainloop


from tkinter import *
from time import strftime



def show(to_text, *args, ):
	to_text.config(state="normal")
	to_text.insert("end", f"{strftime('[%m-%d %H:%M:%S]')} {' '.join(map(lambda s:str(s),args))}\n")
	to_text.config(state="disabled")
	to_text.see("end")
	
def insert():
	show(T, "insert", var.get())
	var.set("")

def create():
	global var,T


	top = Toplevel()
	top.title('window2')
	top.geometry("400x300")
	top.resizable(width=False, height=False)

	T = Text(top, height=7)
	T.config(state="disabled")
	T.place(x=0, y=0)
	Entry(top, textvariable=var, width=30).place(x=45,y=100)
	Button(top, text="do", width=5, command=insert).place(x=290,y=100)

if __name__=="__main__":
	window = Tk()
	window.title("window")
	var = StringVar()
	T = None
	Button(window, text='创建顶级窗口', command=create).pack()
	window.mainloop()

如果将top = Toplevel 更换为 top = Tk() 后面创建的组件将无法使用 StringVar 获取和设置 Entry

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Tkinter是Python中的一个GUI库,提供了创建和管理图形用户界面的功能。Tkinter使用说明PDF是指一份关于如何使用Tkinter库的说明文档,通常包含了Tkinter库的安装、配置以及各种常用功能的使用方法。 首先,Tkinter使用说明PDF会介绍如何安装Tkinter库。通常情况下,Tkinter库已经包含在Python的安装包中,无需额外安装。但是,对于某些Python发行版或特殊情况下,可能需要手动安装Tkinter库。这份使用说明PDF会提供相关的步骤和指引。 接下来,使用说明PDF会详细介绍Tkinter库的配置过程。在使用Tkinter之前,可能需要进行一些相关的配置工作,例如设置环境变量或导入必要的模块。这份说明文档会告诉用户如何完成这些配置,以确保Tkinter库能够顺利使用。 除此之外,使用说明PDF还会详细介绍Tkinter库的各种功能和使用方法。Tkinter库提供了大量的工具和组件,用于创建图形用户界面。这份说明文档会逐一介绍这些工具和组件的使用方法,包括窗口、按钮、标签、文本框、下拉菜单等等。用户可以通过阅读这份说明文档,快速了解如何使用这些组件,并结合示例代码进行实践。 最后,使用说明PDF可能还会提供一些通用的编程技巧和建议。例如,如何处理事件、如何进行布局、如何使界面更美观等等。这些建议能够让用户更好地利用Tkinter库,并编写出功能更强大、用户体验更好的图形用户界面应用程序。 总之,Tkinter使用说明PDF是一份详尽的文档,旨在帮助用户快速上手使用Tkinter库。通过阅读这份文档,用户可以迅速掌握Tkinter的安装、配置及各种常用功能的使用方法。 ### 回答2: Tkinter是Python的标准图形用户界面(GUI)工具包,它提供了与操作系统的原生GUI组件进行交互的功能。Tkinter非常适合初学者学习和使用,因为它易于理解和上手。 要深入了解Tkinter使用,最好的资源之一就是Tkinter使用说明PDF。这个PDF文档详细介绍了Tkinter的各种功能和用法。 首先,该PDF文件提供了Tkinter的安装指南。它指导用户如何正确安装Tkinter库,并提供了一些示例代码来验证是否成功安装。 其次,该PDF文件介绍了Tkinter的基本概念和核心组件。它解释了窗口和框架的概念,介绍了标签、按钮、文本框和其他常用控件的创建和使用方法。 此外,该PDF文件还提供了关于布局管理器的详细说明。布局管理器是Tkinter中非常重要的一个概念,它负责控制窗口中部件的位置和大小。使用布局管理器,用户可以轻松地创建复杂的用户界面。 除了上述内容外,该PDF文件还包含了关于Tkinter事件处理和回调函数的指导。事件处理是GUI编程中重要的一部分,它允许用户对用户界面上的操作进行响应。回调函数则是处理这些事件的函数。 总之,Tkinter使用说明PDF是一个非常有价值的资源。它提供了对Tkinter库的全面介绍,帮助用户快速上手并开发出功能强大的GUI程序。无论您是初学者还是有经验的开发者,该PDF文件都是一个不错的参考资料。 ### 回答3: tkinter是Python的标准图形用户界面库,用于创建窗口、按钮、标签等界面元素,实现交互性的用户界面。 要使用tkinter,首先需要在Python环境中安装tkinter库。在Python 3.x版本中,tkinter库已经集成在Python安装包中,无需额外安装。 在Python代码中导入tkinter库后,可以使用各种tkinter提供的函数和类来构建用户界面。常用的界面元素包括窗口(Tk)、按钮(Button)、标签(Label)、文本框(Entry)等。可以使用这些元素设置其属性和方法来实现界面的布局和交互逻辑。 tkinter的布局管理器是用来管理界面元素的位置和大小的。常见的布局管理器包括pack、grid、place等。pack将元素按照垂直或水平的方式排列,grid将元素放置在网格中,place则是手动设置元素的位置和大小。 tkinter还提供了各种事件处理函数,用于响应用户的操作。可以为界面元素绑定事件,并编写相应的处理函数来实现交互逻辑。 除了基本的界面元素和布局管理器外,tkinter还提供了其他一些功能,如对话框、画布、滚动条等,可以根据实际需求来选择使用。 关于tkinter使用说明,可以参考官方的文档和教程。官方提供了详细的函数和类的描述,以及示例代码和实战项目的介绍。此外,还有很多第三方的教程和书籍可以供参考。 总之,tkinter是Python中一个强大而丰富的图形用户界面库,通过学习和使用tkinter,可以方便地创建和交互用户界面,实现各种应用程序的开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值