Python Tkinter学习

Python Tkinter学习 之 标签和按钮

主要实现:
点击按钮后,标签内容改变

主程序:

import tkinter as tk

# 更改标签文字内容
def hit_me():
    global on_hit
    if on_hit == False:
        # 设置变量
        var.set('hello world')
        on_hit = True
    else:
        var.set('')
        on_hit = False


on_hit = False
# 创建窗口
window = tk.Tk()
# 设置标题
window.title('hello world')
# 设置窗口大小
window.geometry('500x500')
#设置不可更改窗口大小,禁用全屏
window.resizable(False, False)

# tk中的字符串变量定义
var = tk.StringVar()
# 创建一个标签
lable1 = tk.Label(window, textvariable=var, bg='green', font='Arial,12', width=15, height=2)
# 创建一个按钮
button1 = tk.Button(window, text='biubiu', width=10, height=2, command=hit_me)

# 放置标签
lable1.pack()
# 放置按钮
button1.pack()

# 循环刷新,运行窗口,直至退出
window.mainloop()

运行结果:

image.png
image.png
image.png
image.png

Python Tkinter学习 之 输入框和文本框

主要实现:
点击按钮1,将输入框的内容插入到文本框中的光标所在位置
点击按钮2,将输入框的内容插入到文本框中的末尾所在位置
主程序:

import tkinter as tk


# 添加到光标函数
def insert():
    var = entry1.get()
    text1.insert('insert', var)  # insert光标位置,0首位,5从第5个字符开始插入,end末尾


# 添加到末尾位置
def end():
    var = entry1.get()
    text1.insert('end', var)


window = tk.Tk()
window.title('hello world')
window.geometry('200x200')
# 创建输入框
entry1 = tk.Entry(window, show=None)  # 密码show='*'
# 创建按钮1
button1 = tk.Button(window, text='添加到光标位置', width=15, height=2, command=insert)
# 创建按钮2
button2 = tk.Button(window, text='添加到末尾位置', width=15, height=2, command=end)
# 创建文本框
text1 = tk.Text(window, show=None)

# 放置
entry1.pack()
button1.pack()
button2.pack()
text1.pack()

# 循环刷新,运行
window.mainloop()

运行结果:

image.png
image.png
image.png
image.png

Python Tkinter学习 之 列表部件

主要实现:
列表中选中某内容,点击按钮,在标签显示该内容
主程序:

import tkinter as tk

# 获取光标点击的内容,并设置为标签的内容
def selection():
    value = listbox1.get(listbox1.curselection())
    var1.set(value)


window = tk.Tk()
window.title('hello world')
window.geometry('200x200')

# 初始化变量
var1 = tk.StringVar()
var2 = tk.StringVar()
# 设置变量初始值
var2.set((11, 22, 33, 44, 55, 66))

# 创建标签
lable1 = tk.Label(window, bg='yellow', width=15, textvariable=var1)
# 创建按钮1
button1 = tk.Button(window, text='输出选择', width=15, height=2, command=selection)
# 创建列表
listbox1 = tk.Listbox(window, listvariable=var2)
# 循环增加到列表
list_items = [1, 2, 3, 4]
for item in list_items:
    listbox1.insert('end', item)
# 删除列表第三个内容
listbox1.delete(2)

# 放置
lable1.pack()
button1.pack()
listbox1.pack()

# 循环刷新,运行
window.mainloop()

运行结果:

image.png
image.png
image.png
image.png

Python Tkinter学习 之 尺度scale

主要实现:
显示一个横向的尺度,左右拖动改变标签内容
主程序:

import tkinter as tk


def selection(v):
    lable1.config(text=rf'你选择的是{v}')


window = tk.Tk()
window.title('hello world')
window.geometry('200x200')

# 创建标签
lable1 = tk.Label(window, bg='yellow', width=50, text='请选择')
# 创建尺度, from_和to是范围 方向定位(横向) length像素长度 showvalue是否显示value tickinterval隔几个单位显示一个数值 resolution控制小数点
scale = tk.Scale(window, label='try me', from_=5, to=11, orient=tk.HORIZONTAL, length=200, showvalue=0, tickinterval=3,
                 resolution=0.01, command=selection)

# 放置
lable1.pack()
scale.pack()
# 循环刷新,运行
window.mainloop()

运行结果:

image.png
image.png

Python Tkinter学习 之 选择按钮

主要实现:
当按钮被点击时,将按钮的值设置为标签的内容
主程序:

import tkinter as tk


def selection():
    lable1.config(text=rf'你选择的是{var.get()}')


window = tk.Tk()
window.title('hello world')
window.geometry('200x200')

# 初始化变量
var = tk.StringVar()

# 创建标签
lable1 = tk.Label(window, bg='yellow', width=50, text='请选择')
# 创建选择按钮 ,当按钮被选中时,将value的值传给var
radiob1 = tk.Radiobutton(window, text='option A', variable=var, value='A', command=selection)
radiob2 = tk.Radiobutton(window, text='option B', variable=var, value='B', command=selection)
radiob3 = tk.Radiobutton(window, text='option C', variable=var, value='C', command=selection)
# 放置
lable1.pack()
radiob1.pack()
radiob2.pack()
radiob3.pack()
# 循环刷新,运行
window.mainloop()

运行结果:

image.png
image.png
image.png
image.png

Python Tkinter学习 之 勾选项checkbutton

主要实现:
创建多选按钮,当选中一个按钮时,在标签显示已选择该按钮,当选中全部按钮时,在标签显示已选择全部按钮
主程序:

import tkinter as tk


def selection():
    # var1.get()获取var的值
    if (var1.get() == 1) & (var2.get() == 0):
        lable1.config(text=rf'你只选择的是Python')
    if (var1.get() == 0) & (var2.get() == 1):
        lable1.config(text=rf'你只选择的是C++')
    if (var1.get() == 1) & (var2.get() == 1):
        lable1.config(text=rf'你选择了全部')
    if (var1.get() == 0) & (var2.get() == 0):
        lable1.config(text=rf'你没有选择')

window = tk.Tk()
window.title('hello world')
window.geometry('200x200')
var1 = tk.IntVar()
var2 = tk.IntVar()
# 创建标签
lable1 = tk.Label(window, bg='yellow', width=50, text='选择你喜欢的')
# 创建多选按钮,勾选按钮,勾选按钮时onvalue值传给var,取消勾选按钮时offvalue值传给var,
c1 = tk.Checkbutton(window, text='python', variable=var1, onvalue=1, offvalue=0, command=selection)
c2 = tk.Checkbutton(window, text='c++', variable=var2, onvalue=1, offvalue=0, command=selection)

# 放置
lable1.pack()
c1.pack()
c2.pack()
# 循环刷新,运行
window.mainloop()

运行结果:

image.png
image.png
image.png
image.png

Python Tkinter学习 之 画布canvas

主要实现:
创建一个画布,将图片添加到画布,在画布里画图形,点击按钮图形移动
主程序:

import tkinter as tk

# 画布内的组件移动
def moveit():
    canvas.move(line, 0, 2)


window = tk.Tk()
window.title('hello world')
window.geometry('200x200')
# 创建画布
canvas = tk.Canvas(window, bg='blue', height=100, width=200)
# 创建按钮
button = tk.Button(window, text='move', command=moveit)
# 打开图片
image_file = tk.PhotoImage(file='0.gif')
# 将图片添加到画布
imge = canvas.create_image(10, 10, anchor='nw', image=image_file)  # nw锚定的点是图像而不是画布

# 定义坐标变量
x0, y0, x1, y1 = 50, 50, 80, 80
# 画一条直线
line = canvas.create_line(x0, y0, x1, y1)
# 画一个圆
oval = canvas.create_oval(x0, y0, x1, y1, fill='red')
# 画一个扇形
arc = canvas.create_arc(x0 + 30, y0 + 30, x1 + 30, y1 + 30, start=0, extent=180)
# 画一个方形
rect = canvas.create_rectangle(x0 + 0, y0 + 10, x1 + 30, y1 + 30)
# 放置
canvas.pack()
button.pack()
# 循环刷新,运行
window.mainloop()

运行结果:

image.png
image.png

注意:

tkinter只能使用gif图片文件,如需兼容其他图片格式,可使用PIL的Image,和ImageTk
img_gif = tkinter.PhotoImage(file = '0.gif')修改为:

from PIL import Image, ImageTk
img_open = Image.open("0.png")
img_png = ImageTk.PhotoImage(img_open)

Python Tkinter学习 之 菜单menubar

主要实现:
创建一个菜单栏,并实现菜单项的功能
主程序:

import tkinter as tk


count = 0
def do_job():
    global count
    label.config(text=f'do {count}')
    count += 1


window = tk.Tk()
window.title('hello world')
window.geometry('200x200')

# 创建一个标签
label = tk.Label(window, bg='yellow', text='')

# 创建一个菜单栏,可以将他理解成一个容器,在窗口上方
menubar = tk.Menu(window)

# 创建一个菜单项,tearoff=0设置菜单项不能分离出去
filemenu = tk.Menu(menubar, tearoff=0)
# 将菜单项命名为File,并add_cascade添加到菜单栏容器中
menubar.add_cascade(label='File', menu=filemenu)
# 命名并添加功能到file菜单项
filemenu.add_command(label='NEW', command=do_job)
filemenu.add_command(label='open', command=do_job)
filemenu.add_command(label='save', command=do_job)
# 添加一条分割线
filemenu.add_separator()
# quitt()是kinter内的退出函数
filemenu.add_command(label='exit', command=window.quit)

# 创建一个菜单项
editmenu = tk.Menu(menubar, tearoff=0)
# 将菜单项命名为edit,并add_cascade添加到菜单栏容器中
menubar.add_cascade(label='edit', menu=filemenu)
# 命名并添加功能到edit菜单项
editmenu.add_command(label='cut', command=do_job)
editmenu.add_command(label='copy', command=do_job)
editmenu.add_command(label='paste', command=do_job)

# 创建一个二级菜单项,即在菜单项内创建菜单
submenu = tk.Menu(filemenu, tearoff=0)
# 将菜单项命名为import,并添加到edit菜单项中
filemenu.add_cascade(label='import', menu=submenu, underline=0)
# 命名并添加菜单功能到二级菜单
submenu.add_command(label='submenu1', command=do_job)

# 显示菜单栏
window.config(menu=menubar)
# 放置标签
label.pack()
# 循环刷新,运行显示窗口
window.mainloop()

运行结果:

1.jpg
1.jpg

Python Tkinter学习 之 框架frame

简单说明:

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

什么时候用:

  在比如像软件或网页交互界面等,有不同的界面逻辑层级和功能区域划分时可以用到,让交互界面逻辑更加清晰。

主程序:

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

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

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

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

# 第4步,在图形界面上创建一个标签用以显示内容并放置
tk.Label(window, text='on the window', bg='red', font=('Arial', 16)).pack()   # 和前面部件分开创建和放置不同,其实可以创建和放置一步完成

# 第5步,创建一个主frame,长在主window窗口上
frame = tk.Frame(window)
frame.pack()

# 第6步,创建第二层框架frame,长在主框架frame上面
frame_l = tk.Frame(frame)# 第二层frame,左frame,长在主frame上
frame_r = tk.Frame(frame)# 第二层frame,右frame,长在主frame上
frame_l.pack(side='left')
frame_r.pack(side='right')

# 第7步,创建三组标签,为第二层frame上面的内容,分为左区域和右区域,用不同颜色标识
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()

# 第8步,主窗口循环显示
window.mainloop()

运行结果:

image.png
image.png

Python Tkinter学习 之 弹窗messagebox

简单说明:
messageBox:消息框,用于显示你应用程序的消息框。(Python2中为tkMessagebox),其实这里的messageBox就是我们平时看到的弹窗。 我们首先需要定义一个触发功能,来触发这个弹窗,这里我们就放上以前学过的button按钮,通过触发功能,调用messagebox吧,点击button按钮就会弹出提示对话框。
下面给出messagebox提示信息的几种形式:

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

什么时候用:
在比如像软件或网页交互界面等,有不同的界面逻辑层级和功能区域划分时可以用到,让交互界面逻辑更加清晰。主程序:

import tkinter as tk  # 使用Tkinter前需要先导入
import tkinter.messagebox  # 要使用messagebox先要导入模块

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

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

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

# 第5步,定义触发函数功能
def hit_me():
    tk.messagebox.showinfo(title='Hi', message='你好!')              # 提示信息对话窗
    tk.messagebox.showwarning(title='Hi', message='有警告!')       # 提出警告对话窗
    tk.messagebox.showerror(title='Hi', message='出错了!')         # 提出错误对话窗
    print(tk.messagebox.askquestion(title='Hi', message='你好!'))  # 询问选择对话窗return 'yes', 'no'
    print(tk.messagebox.askyesno(title='Hi', message='你好!'))     # return 'True', 'False'
    print(tk.messagebox.askokcancel(title='Hi', message='你好!'))  # return 'True', 'False'
    print(tk.messagebox.askretrycancel(title='Hi', message='你好!'))  # return 'True', 'False'


# 第4步,在图形界面上创建一个标签用以显示内容并放置
tk.Button(window, text='hit me', bg='green', font=('Arial', 14), command=hit_me).pack()

# 第6步,主窗口循环显示
window.mainloop()

测试效果:

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

Python Tkinter学习 之 放置方式pack/grid/place

简单说明:


pack 边界布局,由side控制,默认居中,上top,下bottom,左left,右right。
grid 网格布局,所有的内容会被放在这些规律的方格中,row行,column列,ipadx/ipady网格大小长和宽。
place 自定义位置,由坐标点控制,anchor设置锚点,anchor='nw’的含义是“将控件的左上角的点安放在指定坐标位置”。 x/y是绝对坐标,relx/rely是相对坐标值,是相对父组件的坐标,取值范围为0-1,
窗体界面左上角坐标:relx=0,rely=0
窗体界面右上角坐标:relx=1,rely=1
窗体界面正中间坐标:relx=0.5,rely=0.5
窗体界面左下角坐标:relx=0,rely=1
窗体界面右下角坐标:relx=1,rely=1

主程序:

import tkinter as tk

window = tk.Tk()
window.title('hello world')
window.geometry('200x200')

# grid 网格布局
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)

# 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')  # 右
tk.Label(window, text='P', fg='red').pack()  # 中

# place 自定义位置坐标
tk.Label(window, text='hello Place2').place(x=0, y=0, anchor='nw')  # 绝对位置,将控件的左上角的点安放在指定坐标位置
tk.Label(window, text='hello Place1').place(relx=0.5, rely=0.5, anchor='nw')  # 相对位置,自适应,居中,窗口改变位置不变

# 循环刷新,运行显示窗口
window.mainloop()
最后修改:2022 年 10 月 03 日
如果觉得我的文章对你有用,请随意赞赏