当前位置: 首页 > news >正文

tkiner模块的初步学习

文章目录

  • 一、前言
  • 二、概念
    • 2.1 安装
    • 2.2 窗口
  • 三、小部件
    • 3.1 概述
    • 3.2 常用小部件
      • 3.2.1 Label
      • 3.2.2 Button
      • 3.2.3 Entry
      • 3.2.4 Text
      • 3.2.5 Listbox
      • 3.2.6 Checkbutton
      • 3.2.7 Radiobutton
      • 3.2.8 Scrollbar
    • 3.3 更多小部件
      • 3.3.1 Scale
      • 3.3.2 Spinbox
      • 3.3.3. Progressbar
    • 3.4 主题小部件
  • 四、几何管理
    • 4.1 Frame
    • 4.2 pack
    • 4.3 place
    • 4.4 grid
  • 五、事件处理
    • 5.1 概述
    • 5.2 bind
    • 5.3 其他方法
  • 六、复杂窗口
    • 6.1 常用窗口
    • 6.2 消息框
    • 6.3 分隔符
    • 6.4 Label Frames
    • 6.5 paned windows
    • 6.6 Notebook
    • 6.7 Treeview

一、前言

https://realpython.com/python-gui-tkinter/

https://tkdocs.com/tutorial/index.html

二、概念

2.1 安装

tinker是python内置的标准GUI框架,可跨平台使用。可使用以下命令确保Tkinter正常工作:

import tkinter as tktk._test()

弹出一个窗口,显示Tcl/Tk的版本为8.6,要确保不是8.4或8.5

除此之外,也可以使用其他命令获取确切版本

import tkinter as tkversion = tk.Tcl().eval('info patchlevel')
print('Tk version:', tk.TkVersion, '(Tcl version:', version, ')')
# Tk version: 8.6 (Tcl version: 8.6.12 )

2.2 窗口

画板

窗口是tkinter GUI基础元素,是所有其他GUI元素所在的容器。

import tkinter as tkwindow = tk.Tk()

窗口常用的方法:

方法描述
title()设置标题
geometry()设置窗口大小
resizable(FALSE,FLASE)调整窗口大小,第一个参数控制用户是否可以修改宽度,第二个则是是否可以更改高度
destroy()关闭窗口,所有子窗口也会被关闭
attributes("-fullscreen",1)全屏
withdraw()隐藏窗口

三、小部件

3.1 概述

1️⃣有了窗口后,就可以添加部件,部件是用户与程序交互的元素,部件类型有:

部件描述
Label显示文本
Button按钮
Entry仅允许输入一行文本的文本输入框
Text允许输入多行的文本输入框
Frame对部件进行分组或在部件之间提供填充的矩形区域

命名规范:

小部件可选择的标准参数选项

选项描述
activebackground鼠标悬停时的背景颜色
activeforeground鼠标悬停时的前景颜色
anchor文本或图象在标签中的对齐方式,如n、s、e、w等
background背景颜色
foreground前景颜色
font字体样式
text显示的文本内容
relief边框样式,有flat无边框、raised凸起效果、sunken凹陷效果、groove凹槽效果、ridge立体效果
padx水平内边距
pady垂直内边距
cursor鼠标悬停时的光标样式
borderwidthbd边框宽度
state组件状态,有normal、disabled禁用、active
highlightbackground高亮背景颜色
highlightcolor高亮颜色
highlightthickness高亮边框厚度
takefocus是否可以通过键盘聚焦
underline下划线索引(指定哪个字符带有下划线)

部件设置属性的常用方式:

# 创建时直接指定
label = tk.Label(root, text="Hello", bg="yellow", font=("Arial", 14))# 通过config方法动态修改
button.config(bg="red", state="disabled")  # 禁用按钮并变红# 通过绑定变量控制
text_var = tk.StringVar()
entry = tk.Entry(root, textvariable=text_var)
text_var.set("默认文本")  # 动态更新输入框内容

2️⃣创建部件后,还需要将部件添加到窗口中,在几何管理器一节详细介绍:

方法描述
pack()
grid()不推荐,布局难管理,没有响应式布局
place()推荐使用

3️⃣最后还需执行事件循环来监听事件

window.mainloop()

3.2 常用小部件

3.2.1 Label

可使用Label小部件来添加文本,格式为Label(master=None, cnf={}, **kw)

  1. master为父容器
  2. cnf为配置字典,用于传递配置选项,通常与**kw参数互斥
  3. **kw为关键字参数,用于传递配置选项,支持标准选项和特定于小部件的选项,推荐使用

文本部件特定选项:

特定选项描述
height高度(以文本行为单位)
width宽度(以字符为单位)
justify多行文本对齐方式,有left、center等
wraplength文本自动换行的宽度,以像素为单位

添加文本部件

greeting = tk.Label(text='Hello, world!')
greeting.pack()
window.mainloop()

为文本部件添加一些样式

label = tk.Label(root,text="欢迎使用 Tkinter",font=("Arial", 16),foreground="white",background="blue",width=20,height=2,anchor="center",relief="solid",borderwidth=2
)
label.pack(pady=20)
root.mainloop()

3.2.2 Button

小部件Button可用于显示可点击按钮,格式为Button(master=None, cnf={}, **kw)

特定选项描述
command绑定到按钮上的回调函数(点击时触发)
compound图文混合时的排列方式,有left、right、top、bottom、center
default指定按钮是否为默认按钮,有normal、active、disabled
height高度(以文本行为单位)
overrelief鼠标悬停时的边框样式
image显示图片,需要配合PhotoImage使用
width宽度(以字符为单位)

尝试使用Button小部件:

import tkinter as tkdef on_button_click():print("按钮被点击了!")root = tk.Tk()
button = tk.Button(root,text="点击我",font=("Arial", 14),foreground="white",background="blue",width=10,height=2,anchor="center",relief="raised",borderwidth=2,command=on_button_click  # 绑定点击事件
)
button.pack(pady=20)
root.mainloop()

3.2.3 Entry

使用Entry小部件获取用户输入,格式为Entry(master=None, cnf={}, **kw)

特定选项描述
exportselection是否将选中的文本导出到系统剪贴板
insertbackground插入光标的颜色
insertborderwidth插入光标的边框宽度
insertwidth插入光标的宽度
selectbackground选中文本的背景颜色
selectborderwidth选择文本的边框宽度
selectforeground选中文本的前景颜色
show显示替代字符,如密码输入时显示*
validate指定何时进行验证,如none、focus、focusin、focusout、key
validatecommandvcmd验证输入时调用的回调函数
invalidcommandinvcmd验证失败时调用的回调函数
textvariable与Entry关联的变量

关于validatecommand参数使用:

1️⃣注册验证函数:使用root.register(validation_function) 注册验证函数,返回一个命令对象。验证函数需要返回一个布尔值(True 或 False),表示输入是否有效

2️⃣指定验证触发时机:使用validate参数指定验证触发时机,常见的有:

描述
none不进行验证
focus焦点进入或离开时
focusin焦点进入时
focusout焦点离开时
key每次按键
all上述所有情况

3️⃣传递验证参数:常见的有

描述
%P表示输入框的新值
%S插入的字符
%V验证触发的原因
%W小部件的名称
%i插入字符的位置
%d动作类型,1表示插入;0表示删除

尝试使用Entry小部件来验证输入:

import tkinter as tkdef validate_input(new_value):"""验证输入是否为数字"""if new_value.isdigit() or new_value == "":return Truereturn Falseroot = tk.Tk()
root.title("Entry 示例")# 创建一个 StringVar 变量,用于绑定 Entry 的内容
entry_var = tk.StringVar()# 配置 validatecommand
vcmd = (root.register(validate_input), '%P')  # %P 表示新值entry = tk.Entry(root,textvariable=entry_var,font=("Arial", 14),foreground="black",background="white",width=20,justify="center",validate="key",  # 在按键时验证validatecommand=vcmd,  # 验证命令show=""  # 显示原始输入
)
entry.pack(pady=20)root.mainloop()

除此之外,Entry还可以对用户输入的数据进行操作:

操作描述
get()检索文本
delete(first,last=None)删除文本,可以删除单个字符,也可以删除多个字符工作原理与字符串切片类似。
insert(index,text)插入文本
Select_clear()清空文本框

举个栗子:创建Entry部件,当中输入框里输入值时,控制台会打印输入的文本

import tkinter as tkdef get_entry_value():name = entry.get()print("输入的值:", name)def delete_entry_value():entry.delete(0, tk.END)print("已删除所有内容")def insert_entry_value():entry.insert(0, "python")print("已插入 'python'")window = tk.Tk()
entry = tk.Entry(window, font=("Arial", 14))
entry.pack(pady=20)button1 = tk.Button(window, text="获取输入", command=get_entry_value)
button1.pack(pady=10)button2 = tk.Button(window, text="删除输入", command=delete_entry_value)
button2.pack(pady=10)button3 = tk.Button(window, text="增加输入", command=insert_entry_value)
button3.pack(pady=10)window.mainloop()

3.2.4 Text

Text小部件用于输入文本,与Entry小部件相似,不同之处在于Text小部件可包含多行文本

特定选项描述
setgrid是否设置网络
xscrollcommand与水平滚动条关联的命令
yscrollcommand与垂直滚动条关联的命令
autoseparators是否自动插入分隔符
spacing1段落前的间距
spacing2段落间的间距
spacing3段落后的间距
undo是否启用撤销功能,可以通过text.edit_undo()text.edit_redo()进行撤销和重做操作
maxundo最大撤销操作数
wrap文本换行方式,有none不换行、char按字符换行、word按单词换行
height高度(以文本行为单位)
tabs制表符宽度

尝试使用Text小部件:

import tkinter as tkroot = tk.Tk()
root.title("Text 示例")text = tk.Text(root,font=("Arial", 14),foreground="black",background="white",width=40,height=10,wrap="word",  # 按单词换行undo=True,  # 启用撤销功能insertbackground="blue",  # 插入光标颜色insertwidth=2,  # 插入光标宽度highlightbackground="lightgray",highlightcolor="gray",highlightthickness=2,padx=10,pady=10,relief="groove",state="normal",xscrollcommand=None,yscrollcommand=None
)
text.pack(pady=20)root.mainloop()

同样的,Text与Entry一样可以对用户的输入进行操作

方法描述
get(位置)获取文本(包括换行符),其中获取单个字符"行号.字符位置"行号以1开始,字符位置以0开始,多个字符需要起始索引和结束索引。
delete(位置)删除文本,可以删除单个字符,也可以删除多个字符工作原理与字符串切片类似。
insert(位置,文本)插入文本,如果要将文本插入到新行,需要在插入的文本中增加换行符
import tkinter as tkdef get_text_value():name = text.get("1.0",tk.END)print("输入的值:", name)def delete_text_value():text.delete("1.0", tk.END)print("已删除所有内容")def insert_text_value():text.insert("1.0", "python")print("已插入 'python'")root = tk.Tk()text = tk.Text(root, font=("Arial", 14))
text.pack(pady=20)button1 = tk.Button(root, text="获取输入", command=get_text_value)
button1.pack(pady=10)button2 = tk.Button(root, text="删除输入", command=delete_text_value)
button2.pack(pady=10)button3 = tk.Button(root, text="增加输入", command=insert_text_value)
button3.pack(pady=10)root.mainloop()

3.2.5 Listbox

Listbox列表框允许用户选择一个或多个,格式Entry(master=None, cnf={}, **kw)

特定选项描述
listvariable与Listbox关联的变量,通常使用StringVar或Variable
selectmode选择模式,有single单选、browse单选但可以通过Shift键选择范围、multiple多选、extended单选但可以通过Shift键选择范围或者通过Ctrl键选择多个
activestyle选中项的高亮模式,有dotbox、none

除此之外,还有以下常用方法:

方法描述
insert(index,*elements)在指定位置插入新项目
get(first,last=None)获取指定范围内的项目内容
delete(first,last=None)删除指定范围内的项目
curselection()返回当前选中的项目索引列表

使用实例

import tkinter as tkroot = tk.Tk()# 创建 Listbox
listbox = tk.Listbox(root)
listbox.pack(fill="both", expand=True)# 插入项目
for i in range(10):listbox.insert(tk.END, f"项目 {i+1}")# 设置选中状态
listbox.selection_set(2, 4)  # 选中索引 2 到 4 的项目# 滚动到指定项目
listbox.see(8)  # 确保索引为 8 的项目可见# 获取选中的项目
selected_indices = listbox.curselection()
print("选中的项目索引:", selected_indices)# 获取项目总数
count = listbox.size()
print("项目总数:", count)# 修改项目样式
listbox.itemconfigure(1, background="green", foreground="white")root.mainloop()

3.2.6 Checkbutton

Checkbutton用于勾选选项,格式为Checkbutton(master=None, cnf={}, **kw)

特定选项描述
command绑定回调函数
onvalue选中时的值,默认为1
offvalue未选中时的值,默认为0
variable与Checkbutton关联的变量,通常使用IntVar或BooleanVar
indicatoron是否显示复选框的小方块
selectcolor小方块内勾选的颜色
import tkinter as tkdef on_checkbutton_change():print("Checkbutton 状态:", var.get())root = tk.Tk()
root.title("Checkbutton 示例")# 创建一个 IntVar 变量,用于绑定 Checkbutton 的状态
var = tk.IntVar()checkbutton = tk.Checkbutton(root,text="选择我",variable=var,command=on_checkbutton_change,font=("Arial", 14),foreground="black",background="white",width=20,height=2,anchor="w",relief="groove",borderwidth=2,state="normal",offvalue=0,onvalue=1,selectcolor="lightblue",underline=0
)
checkbutton.pack(pady=20)root.mainloop()

3.2.7 Radiobutton

Radiobutton用于创建一组互斥的选项按钮,用户只能从中选择一个

特定选项描述
command绑定回调函数
value单选按钮的值
variable与Radiobutton关联的变量,通常使用IntVar或BooleanVar
import tkinter as tkdef on_radiobutton_change():print("选中的值:", var.get())root = tk.Tk()
root.title("Radiobutton 示例")# 创建一个 IntVar 变量,用于绑定 Radiobutton 的状态
var = tk.IntVar()# 创建 Radiobutton 小部件
radiobutton1 = tk.Radiobutton(root,text="选项 1",variable=var,value=1,command=on_radiobutton_change,font=("Arial", 14),foreground="black",background="white",width=20,height=2,anchor="w",relief="groove",borderwidth=2,state="normal",selectcolor="lightblue",underline=0
)
radiobutton1.pack(pady=10)radiobutton2 = tk.Radiobutton(root,text="选项 2",variable=var,value=2,command=on_radiobutton_change,font=("Arial", 14),foreground="black",background="white",width=20,height=2,anchor="w",relief="groove",borderwidth=2,state="normal",selectcolor="lightblue",underline=0
)
radiobutton2.pack(pady=10)root.mainloop()

3.2.8 Scrollbar

Scrollbar滚动条可以帮助用户查看另一个部件的剩余部分

特定选项描述
orient滚动条的方向,tk.VERTICAL表示垂直滚动条;tk.HORIZONTAL表示水平滚动条
jump是否允许拖动滑块直接跳转到某个位置
troughcolor滑槽的颜色
width滚动条的宽度(以像素为单位)
command绑定回调函数,接受两个参数first、last分别表示滚动条可见区域的起始位置和结束位置,浮点数表示,范围为0到1

config方法可以用于动态修改滚动条配置选项,格式为config(cnf=None,**kw)

  1. cnf:如果为字典类型,表示要批量设置的选项,如果是字符串类型,则表示要查询的选项名称
  2. **kw:键值对形式,用于动态修改滚动条的配置

绑定滚动条与小部件的command参数:

  1. text.yview:将垂直滚动条与Text小部件的垂直滚动关联
  2. text.xview:将水平滚动条与Text小部件的水平滚动关联
import tkinter as tkroot = tk.Tk()
root.title("Scrollbar使用")# 创建两个滚动条
scrollbar_v = tk.Scrollbar(root)
scrollbar_v.pack(side=tk.RIGHT, fill=tk.Y)
scrollbar_h = tk.Scrollbar(root, orient=tk.HORIZONTAL)
scrollbar_h.pack(side=tk.BOTTOM, fill=tk.X)# 创建一个文本框
text = tk.Text(root, height=10, width=30, yscrollcommand=scrollbar_v.set)
text.pack(side=tk.LEFT, fill=tk.BOTH)
scrollbar_v.config(command=text.yview)
scrollbar_h.config(command=text.xview)
root.mainloop()

3.3 更多小部件

3.3.1 Scale

Scale组件允许用户直接选择数值

特定选项描述
tickinterval刻度线的间隔
resolution刻度的最小变化值,默认为1
digits显示值的小数位数
from_ 刻度的起始值
to刻度的结束值
variable与Scale关联的变量,通常使用IntVar或DoubleVar
command回调函数,会接受当前值作为参数
showvalue是否显示当前值
orient刻度的方向,有horizontal和vertical
import tkinter as tk# 创建主窗口
root = tk.Tk()
root.title("Scale 示例")# 定义回调函数
def on_scale_change(value):print(f"当前值: {value}")# 创建水平刻度条
scale_horizontal = tk.Scale(root,from_=0,to=100,orient="horizontal",length=300,tickinterval=10,command=on_scale_change
)
scale_horizontal.pack(pady=20)# 创建垂直刻度条
scale_vertical = tk.Scale(root,from_=0,to=100,orient="vertical",length=200,tickinterval=10,command=on_scale_change
)
scale_vertical.pack(padx=20, side="right")# 运行主循环
root.mainloop()

3.3.2 Spinbox

Spinbox组件允许用户在给定范围内选择数字

特定参数描述
buttondownrelief向下按钮的边框样式
buttonuprelief向上按钮的边框样式
command绑定回调函数
format显示值的格式
from_ 刻度的起始值
to刻度的结束值
increment每次点击按钮值的变化量
readonlybackground只读状态下的背景颜色
validate指定何时进行验证
validatecommand验证输入时调用的回调函数
values可选值列表,优先级高于from_to
width宽度
wrap是否允许值在达到最大值后绕回到最小值
textvariable与文本关联的变量
import tkinter as tkdef on_spinbox_change(*args):print("当前值:", spinbox.get())root = tk.Tk()
root.title("Spinbox 示例")# 创建一个 IntVar 变量,用于绑定 Spinbox 的值
spinbox_var = tk.IntVar()# 创建 Spinbox 小部件
spinbox = tk.Spinbox(root,from_=0,to=100,increment=5,textvariable=spinbox_var,command=on_spinbox_change,font=("Arial", 14),width=10,justify="center",wrap=True,state="normal",buttonbackground="lightgray",buttoncursor="arrow",buttondownrelief="sunken",buttonuprelief="raised",relief="groove",takefocus=True,validate="key",validatecommand=(root.register(lambda value: value.isdigit() or value == ""), "%P")
)
spinbox.pack(pady=20)root.mainloop()

3.3.3. Progressbar

Progressbar部件用于显示进度状态,有两种模式:确定模式和不确定模式,格式:Progressbar(master=None, **kw)

参数描述
orient进度条方向,默认horizontal水平方向,vertical垂直方向
mode工作模式,有determinate确定模式,显示已完成的任务量;indeterminate不确定模式,显示动画效果,表示任务正在进行中。
maximum进度条最大值,默认为100
value设置当前进度值,仅在确定模式下有效
variable绑定一个变量
phase不常用,表示不确定模式下的动画阶段

方法介绍:

方法描述
start(interval=None)开始自动递增模式,每隔interval毫秒就调用step方法
step(amount=None)手动递增进度条的值
stop()停止自动递增模式
import tkinter as tk
from tkinter import ttk# 创建主窗口
root = tk.Tk()
root.title("Progressbar 示例")# 创建进度条
progress = ttk.Progressbar(root, orient="horizontal", length=300, mode="determinate")
progress.pack(pady=20)# 初始化进度值
progress['value'] = 0# 定义按钮点击事件
def start_progress():if progress['value'] < 100:progress['value'] += 10  # 每次增加 10root.after(500, start_progress)  # 每隔 500 毫秒调用一次# 创建按钮
button = ttk.Button(root, text="开始", command=start_progress)
button.pack()# 运行主循环
root.mainloop()

3.4 主题小部件

Tkinter目前有两大类小部件:优先使用ttk部件

  1. 经典小部件:tkinter,简单易用,例如tkinter.Label
  2. 主题小部件:ttk,默认使用操作系统的原生外观,可看作Tkinter的CSS,例如tkinter.ttk.Label

在使用Tkinter的主题部件时,通常使用以下命令

import tkinter as tk
import tkinter.ttk as ttk

尝试使用部件:

tk.Label()
ttk.Label()

也可以使用更便捷的用法,主题小部件会自动覆盖旧部件:

from tkinter import *
from tkinter.ttk import *Label()
Text()

四、几何管理

同一窗口中只能使用一种布局管理器

4.1 Frame

空的Frame小部件实际上是不可见的,一般用来做其他小部件的容器master参数值

frame = tk.Frame()
label = tk.Label(master=frame)

Frame适合以逻辑方式布置其他小部件

import tkinter as tkwindow = tk.Tk()frame_a = tk.Frame()
frame_b = tk.Frame()label_a = tk.Label(master=frame_a, text="I'm in Frame A")
label_a.pack()label_b = tk.Label(master=frame_b, text="I'm in Frame B")
label_b.pack()frame_a.pack()
frame_b.pack()window.mainloop()

如果将frame_a.pack()frame_b.pack()的顺序调换:

4.2 pack

pack使用打包算法将小部件按指定顺序放在Frame或窗口中,是响应式布局;默认情况下将每个组件放置在前一个组件的下方

import tkinter as tkwindow = tk.Tk()frame1 = tk.Frame(master=window, width=100, height=100, bg="red")
frame1.pack()frame2 = tk.Frame(master=window, width=50, height=50, bg="yellow")
frame2.pack()frame3 = tk.Frame(master=window, width=25, height=25, bg="blue")
frame3.pack()window.mainloop()

pack的一些常用参数

常用参数描述
fill指定哪个方向填充,tk.X为填充水平方向;tk.Y为填充垂直方向;使用tk.BOTH同时需要设置expand
side指定放置在窗口哪一侧,tk.TOP(默认)、tk.BOTTOMtk.LEFTtk.RIGHT

使用fill参数后填充水平方向:frame1.pack(fill=tk.X)

使用side参数后填充水平方向:frame1.pack(side=tk.LEFT, fill=tk.Y)

4.3 place

place可以控制精确位置,需要x和y参数来指定小部件左上角的x和y,以像素为单位。place很难管理布局,且没有响应式,一般不推荐使用。

import tkinter as tkwindow = tk.Tk()frame = tk.Frame(master=window, width=150, height=150)
frame.pack()label1 = tk.Label(master=frame, text="I'm at (0, 0)", bg="red")
label1.place(x=0, y=0)label2 = tk.Label(master=frame, text="I'm at (75, 75)", bg="yellow")
label2.place(x=75, y=75)window.mainloop()

4.4 grid

grid通过将窗口或Frame拆分为行和列来工作

常用参数描述
row行索引
column列索引
padx水平方向上添加外部填充
pady垂直方向上添加外部填充
sticky更改网格内标签的位置,有n、w、e、s
import tkinter as tkwindow = tk.Tk()for i in range(3):for j in range(3):frame = tk.Frame(master=window,relief=tk.RAISED,borderwidth=1)frame.grid(row=i, column=j)label = tk.Label(master=frame, text=f"Row {i}\nColumn {j}")label.pack()window.mainloop()

除此之外可以使用columnconfigure方法和rowconfigure方法来实现网格适应窗口变化,它们都有共同的基本参数:

  1. index:索引,要配置的网格列或者行索引,如果要配置多个则采用列表形式
  2. Weight:确定列或行要如何响应窗口(相对于其他行或列),为0时这列/行不会随窗口大小而扩展,如果都为1时以相同速率生长
  3. Minimum Size:设置行高度或列宽度的最小尺寸,以像素为单位
import tkinter as tkwindow = tk.Tk()for i in range(3):window.columnconfigure(i, weight=1, minsize=75)window.rowconfigure(i, weight=1, minsize=50)for j in range(0, 3):frame = tk.Frame(master=window,relief=tk.RAISED,borderwidth=1)frame.grid(row=i, column=j, padx=5, pady=5)label = tk.Label(master=frame, text=f"Row {i}\nColumn {j}")label.pack(padx=5, pady=5)window.mainloop()

grid与pack在填充上对应关系:推荐使用grid

五、事件处理

5.1 概述

使用window.mainloop()来启动事件循环,使用bind或者command方法来绑定事件,command方法一般不接受参数。

事件发生时,会从触发该事件的小部件开始,逐级向上传播到其父容器直到根窗口,这个过程称为事件传播,如果希望阻止事件传播到父容器,可以在回调函数中返回break

Event事件对象常用属性有:

属性描述
xy事件发生的坐标(相对于组件)
x_root,y_root事件发生的坐标(相对于屏幕)
keysym按键的符号名称
widget触发事件的小部件
type事件类型
time事件发生的时间戳

事件模式由<MODIFIER-MODIFIER-TYPE-DETAIL>构成

1️⃣MODIFIER修饰符用于指定按键组合,常见的有:

修饰符描述
ControlCtrl键
AltAlt键
MetaMeta键,通常对应Windows键或Command键
ShiftShift键
LockCaps Lock键
Button1Button5鼠标按钮

2️⃣Type事件类型定义了具体的事件类型,常见的有:

事件描述
Activate窗口激活,通常指state的变化
Deactivate从活动状态变为不活动状态,通常指state的变化
Button左键点击、左键双击
ButtonRelease释放鼠标按钮
Destroy小部件销毁
Enter鼠标进入小部件区域
Leave鼠标移出部件区域
Motion鼠标拖动
FocusIn进入焦点
FocusOut退出焦点
MouseWheel滚轮滚动
Configure窗口大小或位置改变
KeyPressKey键盘按键按下
KeyRelease键盘按键释放

3️⃣DETAIL细节时对事件类型的详细补充,例如对于Button来说,1表示左键,3表示右键;而对于KeyPress来说,细节是按键的符号名称。

5.2 bind

使用bind方法来绑定事件,格式为bind(sequence=None, func=None, add=None)

  1. sequence:事件序列,由一个或多个事件模式组成,格式为<MODIFIER-MODIFIER-TYPE-DETAIL>,例如<Control-c>按下
    Ctrl + C;<<CustomEvent>>自定义虚拟事件。
  2. func:事件发生时执行的函数,接受Event实例,如果返回值为break则阻止后续函数调用。
  3. add:为True时则将新绑定函数添加到现有绑定中,如果为False则替换现有绑定。

如果绑定了事件,可以用unbind来删除绑定:widget.unbind("<事件类型>")

绑定鼠标事件:

import tkinter as tk# 创建主窗口
root = tk.Tk()# 定义回调函数
def on_click(event):print(f"鼠标点击位置: ({event.x}, {event.y})")# 创建按钮
button = tk.Button(root, text="点击我")
button.pack(pady=20)# 绑定鼠标左键点击事件
button.bind("<Button-1>", on_click)# 运行主循环
root.mainloop()

虚拟事件是用户自定义的事件,通过event_generate来触发

import tkinter as tk# 创建主窗口
root = tk.Tk()# 定义回调函数
def on_custom_event(event):print("触发了自定义事件")# 创建按钮
button = tk.Button(root, text="触发事件")
button.pack(pady=20)# 绑定虚拟事件
button.bind("<<CustomEvent>>", on_custom_event)# 触发虚拟事件
button.event_generate("<<CustomEvent>>")# 运行主循环
root.mainloop()

5.3 其他方法

bind_class(class_name,sequence,func):为特定类名的小部件绑定事件

  root.bind_class("Button", "<Button-1>", lambda event: print("任意按钮点击"))

bind_all(sequence,func):为所有小部件绑定事件

  root.bind_all("<KeyPress>", lambda event: print(f"按键: {event.keysym}"))

六、复杂窗口

6.1 常用窗口

filedialog模块可以对文件或目录进行操作

from tkinter import filedialog# 打开文件对话框
open_filename = filedialog.askopenfilename(title="选择要打开的文件")
if open_filename:print(f"选择的文件路径: {open_filename}")# 保存文件对话框
save_filename = filedialog.asksaveasfilename(title="选择保存文件的位置")
if save_filename:print(f"保存的文件路径: {save_filename}")# 选择文件夹对话框
dirname = filedialog.askdirectory(title="选择一个文件夹")
if dirname:print(f"选择的文件夹路径: {dirname}")

进行颜色选择:

from tkinter import colorchooser# 创建颜色选择器对话框
color_chooser = colorchooser.Chooser(initialcolor="#ff0000",  # 初始颜色为红色title="选择颜色"         # 对话框标题
)
rgb, hex_color = color_chooser.show()if rgb and hex_color:print(f"RGB: {rgb}, Hex: {hex_color}")
else:print("用户取消了颜色选择")

选择字体:

import tkinter as tk
from tkinter import ttk
def font_changed(font):if font:  # 如果用户没有取消选择print("Selected font:", font)label.config(font=font)def font_choice() -> None:root.tk.call('tk', 'fontchooser', 'configure','-font', current_font.get(),'-command', root.register(font_changed))root.tk.call('tk', 'fontchooser', 'show')root = tk.Tk()
root.title("字体选择示例")
root.geometry("300x150")current_font = tk.StringVar(value="helvetica 24")label = ttk.Label(root,text="你好啊",font=current_font.get(),padding=(10, 10))
label.pack(pady=10)btn = ttk.Button(root,text="选择字体",command=font_choice)
btn.pack(pady=10)root.mainloop()

在这里插入图片描述

6.2 消息框

使用messagebox模块来应用消息提示框,有不同类型的提示框

类型描述
showinfo(title,message,**options)信息对话框
shhowwaring(title,message,**options)警告对话框
showerror(title,message,**options)错误对话框
askquestion(title,message,**options)带有是和否的问题对话框
askokcancel(title,message,**options)带有确定和取消的对话框
askyesno(title,message,**options)带有是和否的对话框
askyesnocancel(title,message,**options)带有是、否、取消的对话框
askretrycancel(title,message,**options)带有重试和取消的对话框

参数解析:

参数描述
title对话框的标题
message对话框显示的消息文本
icon显示的图标类型,有ERROR,INFO,QUESTION,WARNING
default设置默认按钮
parent指定对话框的父窗口

使用示例:

from tkinter import messagebox
messagebox.showinfo(message='Have a good day')
messagebox.askyesno(message='Are you sure you want to install SuperVirus?', icon='question', title='Install')

6.3 分隔符

使用Separator部件在小部件之间放置水平或垂直线来实现分隔

import tkinter as tk
from tkinter import ttkroot = tk.Tk()
root.title("Separator 示例")
root.geometry("300x200")separator_horizontal_grid = ttk.Separator(root, orient=tk.HORIZONTAL)
separator_horizontal_grid.grid(row=1, column=0, sticky="ew", padx=10, pady=10)separator_vertical_grid = ttk.Separator(root, orient=tk.VERTICAL)
separator_vertical_grid.grid(row=0, column=1, rowspan=3, sticky="ns", padx=10, pady=10)# 添加一些标签以显示分隔线的效果
label1 = ttk.Label(root, text="标签 1")
label1.grid(row=0, column=0, padx=10, pady=10)label2 = ttk.Label(root, text="标签 2")
label2.grid(row=2, column=0, padx=10, pady=10)label3 = ttk.Label(root, text="标签 3")
label3.grid(row=0, column=2, padx=10, pady=10)root.mainloop()

6.4 Label Frames

label Frames称为标签帧,一些常用参数:

参数描述
labelanchor指定标签的位置,如n顶部中间,nw左上角
padding设置内部部件与边框之间的间距
labelwidget使用自定义的小部件作为标签
class_小部件的类名,通常不需要手动设置
style小部件的样式,需要提前通过ttk.Style定义
takefocus指定小部件是否可以通过Tab键获取焦点
import tkinter as tk
from tkinter import ttkroot = tk.Tk()
root.title("Labelframe 示例")# 创建一个 Labelframe
labelframe = ttk.Labelframe(root, text="这是一个 Labelframe", labelanchor="n")
labelframe.pack(padx=10, pady=10, fill="both", expand=True)# 在 Labelframe 内添加其他小部件
label = ttk.Label(labelframe, text="这是 Labelframe 内部的内容")
label.pack(padx=5, pady=5)root.mainloop()

6.5 paned windows

常用参数:

参数描述
class_小部件的类名,通常不需要手动设置
orient设置子窗口的排列方式,值为horizontalvertical
takefocus指定小部件是否可以通过Tab键获取焦点

常用方法:

方法描述
add(child,**kw)添加一个子窗口,**kw为子窗口选项(如weight权重)
insert(pos,child,**kw)在指定位置插入一个子窗口
forget(child)移除指定子窗口
sashpos(index,newpos=None)获取或设置分割条的位置,newpos为新的位置
pane(pane,option=None,**kw)查询或修改子窗口的选项,pane为子窗口索引或名称,option如果指定则返回该选项的值

使用实例

import tkinter as tk
from tkinter import ttk# 创建主窗口
root = tk.Tk()
root.title("Panedwindow 示例")# 创建一个水平方向的 Panedwindow
paned_window = ttk.Panedwindow(root, orient="horizontal")
paned_window.pack(fill="both", expand=True)# 添加第一个子窗口
frame1 = ttk.Frame(paned_window, width=100, height=200, relief="sunken")
paned_window.add(frame1)# 添加第二个子窗口
frame2 = ttk.Frame(paned_window, width=300, height=200, relief="sunken")
paned_window.insert(0, frame2)# 查询子窗口选项
options = paned_window.pane(0)
print(options)  # {'weight': 0}# 运行主循环
root.mainloop()

6.6 Notebook

Notebook用于管理一组窗口,同一时间只显示一个窗口,每个子窗口与一个标签关联。

参数描述
class指定窗口类名,通常不设置
style样式
padding标签之间的间距

常用方法如下所示,其中tab_id可以是标签索引(从0开始)、子窗口名称、位置规格(如@x,y表示鼠标指针所在位置的标签)、current(当前选中的标签)等

方法描述
add(child,**kw)添加新的标签页
forget(tab_id)移除指定的标签页
hide(tab_id)隐藏指定的标签页
select(tab_id=None)选择指定的标签页
insert(pos,child,**kw)指定位置插入一个标签页
enable_traversal()启用键盘导航功能,有Ctrl+Tab切换到下一个标签页等
tab(tab_id,option=None,**kw)查询或修改指定标签的选项

使用示例:

import tkinter as tk
from tkinter import ttkroot = tk.Tk()
root.title("Notebook 示例")# 创建 Notebook
notebook = ttk.Notebook(root)
notebook.pack(fill="both", expand=True)# 创建标签页
frame1 = ttk.Frame(notebook, width=200, height=200)
frame2 = ttk.Frame(notebook, width=200, height=200)# 添加标签页
notebook.add(frame1, text="标签页 1")
notebook.add(frame2, text="标签页 2")# 在标签页中添加内容
label1 = ttk.Label(frame1, text="这是标签页 1 的内容")
label1.pack(pady=20)label2 = ttk.Label(frame2, text="这是标签页 2 的内容")
label2.pack(pady=20)# 启用键盘导航
notebook.enable_traversal()root.mainloop()

6.7 Treeview

Treeview用于显示分层的项目集合,构造时有以下常用参数:

参数描述
xscrollcommand绑定水平滚动条
yscrollcommand绑定垂直滚动条
columns定义除树形结构外的其他列
displaycolumns指定要显示的列(默认所有列)
selectmode设置选择模式,有browse单选模式(默认)、extended多选、none禁用选择
padding设置子项之间的间距
show指定显示的内容,有tree仅显示树形结构、headings仅显示列标题、tree headings同时显示树形结构和列标题

除此之外,常用方法有:

方法描述
delete(*items)删除指定项目极其后代
exists(item)检查指定项目是否存在
insert(parent,index,iid=None,**kw)插入新项目,parent参数里""表示根项目,iid表示项目标识符,**kw项目选项
tag_bind(tagname,sequence=None,callback=None)为指定标签绑定事件,tagname标签名称;sequence事件序列;callback回调函数

项目选项:在插入项目或者修改项目时,通常有以下选项

参数描述
text文本标签
image图象
values数据值列表,对应各列
open指定项目是否展开,可选值为True或False
tags给项目添加标签,用于绑定事件或样式

使用案例:

import tkinter as tk
from tkinter import ttk# 创建主窗口
root = tk.Tk()
root.title("Treeview 示例")# 创建 Treeview
tree = ttk.Treeview(root, columns=("姓名", "年龄"), show="headings")
tree.pack(fill="both", expand=True)# 设置列标题
tree.heading("#1", text="姓名")
tree.heading("#2", text="年龄")# 插入数据
data = [("张三", "25"), ("李四", "30"), ("王五", "22")]
for item in data:tree.insert("", "end", values=item)# 添加滚动条
scrollbar = ttk.Scrollbar(root, orient="vertical", command=tree.yview)
scrollbar.pack(side="right", fill="y")
tree.configure(yscrollcommand=scrollbar.set)# 运行主循环
root.mainloop()

相关文章:

tkiner模块的初步学习

文章目录 一、前言二、概念2.1 安装2.2 窗口 三、小部件3.1 概述3.2 常用小部件3.2.1 Label3.2.2 Button3.2.3 Entry3.2.4 Text3.2.5 Listbox3.2.6 Checkbutton3.2.7 Radiobutton3.2.8 Scrollbar 3.3 更多小部件3.3.1 Scale3.3.2 Spinbox3.3.3. Progressbar 3.4 主题小部件 四、…...

Java常用数据结构操作方法全面总结

目录 一、List接口及其实现类二、Set接口及其实现类三、Map接口及其实现类四、Queue/Deque队列五、Stack栈六、树形结构七、注意事项与最佳实践总结 一、List接口及其实现类 核心实现类 ArrayList&#xff1a;基于动态数组LinkedList&#xff1a;基于双向链表 常用操作方法…...

Java的Selenium的特殊元素操作与定位之select下拉框

如果页面元素是一个下拉框&#xff0c;我们可以将此web元素封装为Select对象 Select selectnew Select(WebElement element); Select对象常用api select.getOptions();//获取所有选项select.selectBylndex(index);//根据索引选中对应的元素select.selectByValue(value);//选…...

STM32单片机入门学习——第15节: [6-3] TIM输出比较

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.05 STM32开发板学习——第15节: [6-3] TIM输出比较 前言开发板说明引用解答和科普一…...

力扣经典算法篇-9-跳跃游戏(贪心算法,反向递推)

题干&#xff1a; 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 …...

java面向对象 - 封装、继承和多态

1.封装 定义 封装是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。通过访问控制修饰符(如private、protected、public)对属性和方法的访问进行限制,以此提升代码的安全性与可维护性。 要点 访问控制:运用private修饰属性,防止外部直…...

铁电液晶(FLC)与反铁电液晶(AFLC)

### **铁电液晶&#xff08;FLC&#xff09;与反铁电液晶&#xff08;AFLC&#xff09;的原理、区别及应用** --- ## **1. 基本原理** ### **&#xff08;1&#xff09;铁电液晶&#xff08;Ferroelectric Liquid Crystal, FLC&#xff09;** - **分子结构**&#xff1a; …...

经典算法 a^b

原题目链接 问题描述 求 a 的 b 次方对 p 取模的值&#xff0c;即计算&#xff1a; a^b mod p输入格式 输入一行&#xff0c;包含三个整数 a、b 和 p&#xff0c;中间用空格隔开。 输出格式 输出一个整数&#xff0c;表示 a^b mod p 的值。 数据范围 0 ≤ a, b ≤ 10^91 …...

Python解决“组成字符串ku的最大次数”问题

Python解决“组成字符串ku的最大次数”问题 问题描述测试样例解题思路代码 问题描述 给定一个字符串 s&#xff0c;该字符串中只包含英文大小写字母。你需要计算从字符串中最多能组成多少个字符串 “ku”。每次可以随机从字符串中选一个字符&#xff0c;并且选中的字符不能再使…...

ubuntu22使用TrinityCore搭建魔兽世界服务器

目录 一、Ubuntu22工具下载二、服务端编译配置1. 从 git 上拉取服务端代码2. 编译客户端3. 修改配置文件4. 加载sql语句5. 下载客户端6. 下载必要sql文件 三、客户端连接配置四、游戏启动 一、Ubuntu22工具下载 下载所有需要的工具 sudo apt-get update sudo apt-get install…...

LeetCode - 739.每日温度问题单调栈解法

目录 问题描述 方法思路&#xff1a;单调栈 核心思想 为什么用单调栈&#xff1f; 算法步骤 代码实现与逐行解析 示例解析 复杂度分析 总结 问题描述 给定一个整数数组 temperatures&#xff0c;表示每天的温度&#xff0c;返回一个数组 answer&#xff0c;其中 answe…...

GESP:2025-3月等级8-T1-上学

时间限制 : 1 秒 内存限制 : 128 MB C 城可以视为由 n个结点与 m条边组成的无向图。这些结点依次以1,2,....n标号&#xff0c;边依次以 1,2...m标号。第i条边&#xff08;1<i<m &#xff09;连接编号为ui 与vi的结点&#xff0c;长度为li米。 小 A 的学校坐落在 C 城中…...

宏碁笔记本电脑擎7PRO搭载的 NVIDIA RTX 5080 显卡安装pytorch

宏碁笔记本电脑擎7PRO搭载的 NVIDIA RTX 5080 显卡是一款高性能移动 GPU&#xff0c;基于 NVIDIA 最新的 Blackwell 架构设计&#xff0c;通过修正架构&#xff08;Blackwell&#xff09;、显存类型与带宽&#xff08;GDDR7、960GB/s&#xff09;、Tensor Core 与 RT Core 全面…...

Qwen-7B-Chat 本地化部署使用

通义千问 简介 通义千问是阿里云推出的超大规模语言模型&#xff0c;以下是其优缺点&#xff1a; 优点 强大的基础能力&#xff1a;具备语义理解与抽取、闲聊、上下文对话、生成与创作、知识与百科、代码、逻辑与推理、计算、角色扮演等多种能力。可以续写小说、编写邮件、解…...

数据结构,顺序存储线性表

//线性表顺序存储 #include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 #define ElemType int //定义结构体 typedef struct LinearList{ElemType elem[MAXSIZE];int last; }LinearList; //初始化链表 void InitList(LinearList &L){L.last-1; };…...

Matlab轴承故障信号仿真与故障分析

1.摘要 本文介绍了一个基于Matlab的轴承故障信号仿真与分析程序&#xff0c;旨在模拟和分析轴承内圈故障信号的特征。程序首先通过生成故障信号、共振信号和调制信号&#xff0c;添加噪声和离散化处理&#xff0c;构建模拟的振动信号&#xff0c;并保存相关数据。通过快速傅里…...

Git三剑客:工作区、暂存区、版本库深度解析

一、引言&#xff1a;为什么需要理解Git的核心区域&#xff1f; 作为开发者&#xff0c;Git是日常必备的版本控制工具。但你是否曾因以下问题感到困惑&#xff1f; 修改了文件&#xff0c;但 git status 显示一片混乱&#xff1f; git add 和 git commit 到底做了什么&#x…...

stack和queue

1.stack的使用 函数说明接口说明 stack() 构造空的栈 empty 检测stack是否为空 size 返回stack中元素的个数 top 返回栈顶元素的引用 push 将元素val压入stack中 pop 将stack中尾部的元素弹出 void test_stack() {stack<int> st;st.push(1);st.push(2);st.push(3);s…...

【补题】Codeforces Round 1011 (Div. 2) C. Serval and The Formula

题意&#xff1a;给两个数&#xff0c;问你存不存在k使nmn异或m 思路&#xff1a; 为了让nmn异或m成功&#xff0c;很明显有两个数在同一位上最多只能有1个1。因为如果有两个就会导致数字变小&#xff0c;很明显nm是不可能成功的&#xff0c;因为你怎么搞都会有至少一个一模一…...

基于javaweb的SpringBoot汉服文化bbs系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

Vision_Robot

import time import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk import socket import threading from datetime import datetime import logging import subprocess # 确保导入 subprocess 库 import os import pyautogu…...

爬虫练习案例

案例1&#xff1a; 爬取菜鸟教程左侧导航栏的分类内容&#xff1a; 在pycharm中书写代码。 先倒入相关模块。 import requests from bs4 import BeautifulSoup import lxml.etree as le这个案例写两种写法。 第一种&#xff1a; urlhttps://www.runoob.com/html/html-tuto…...

大数据时代的隐私保护:区块链技术的创新应用

一、引言 在当今数字化时代&#xff0c;大数据已经成为推动社会发展的关键力量。从商业决策到社会治理&#xff0c;从医疗健康到金融服务&#xff0c;数据的价值日益凸显。然而&#xff0c;随着数据的大量收集和广泛使用&#xff0c;隐私保护问题也日益突出。如何在充分利用大…...

力扣刷题-热题100题-第31题(c++、python)

25. K 个一组翻转链表 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/reverse-nodes-in-k-group/?envTypestudy-plan-v2&envIdtop-100-liked 常规模拟 根据翻转的长度找到头和尾&#xff0c;进入函数进行翻转 主程序里有循环不断找到头和尾并拼…...

(四)数据检索与增强生成——让对话系统更智能、更高效

上一篇&#xff1a;&#xff08;三&#xff09;链式工作流构建——打造智能对话的强大引擎 在前三个阶段&#xff0c;我们已经搭建了一个基础的智能对话&#xff0c;并深入探讨了输入输出处理和链式工作流构建的细节。今天&#xff0c;我们将进入智能对话系统的高级阶段——数…...

Turtle图形化编程知识点汇总:让编程更有趣

友情提示&#xff1a;本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台gpt-4-turbo模型生成&#xff0c;仅供参考! 在学习编程的过程中&#xff0c;许多初学者会接触到Python的turtle图形库&#xff0c;它是一种图形化编程工具&#xff0c;通过简单的…...

Social GAN(CVPR2018)

文章目录 AbstractIntroductionRelated WorkHuman-Human InteractionRNNs for Sequence PredictionGenerative Modeling MethodProblem DefinitionGenerative Adversarial NetworksSocially-Aware GANPooling ModuleEncouraging Diverse Sample Generation Conclusion paper Ab…...

0201线性回归-机器学习-人工智能

文章目录 1 程序目标2 代码实现3 关键步骤解释4 示例输出5 注意事项结语 以下是一个使用 scikit-learn、pandas和 matplotlib 实现线性回归的完整程序示例。程序包含数据加载、模型训练、预测和可视化。 1 程序目标 加载数据&#xff08;使用 pandas&#xff09;数据预处理&am…...

2-Visual Studio 2022 NET开发Windows桌面软件并连接SQL Server数据库

引言 今天尝试Visual Studio 2022 NET开发一个NET桌面软件&#xff0c;并尝试连接SQL Server的数据库&#xff0c;此文章为开发笔记。 --------------------------------------------------------------------------------------------------------------------------------- …...

OpenGL学习笔记(简介、三角形、着色器、纹理、坐标系统、摄像机)

目录 简介核心模式与立即渲染模式状态机对象GLFW和GLAD Hello OpenGLTriangle 三角形顶点缓冲对象 VBO顶点数组对象 VAO元素缓冲对象 EBO/ 索引缓冲对象 IEO 着色器GLSL数据类型输入输出Uniform 纹理纹理过滤Mipmap 多级渐远纹理实际使用方式纹理单元 坐标系统裁剪空间 摄像机自…...

第二十九章:Python-mahotas库:图像处理的高效工具

一、mahotas库简介 mahotas是一个功能强大的Python图像处理库&#xff0c;提供了丰富的图像处理算法和工具&#xff0c;包括图像分割、特征提取、滤波、形态学操作等。它以简洁的API和高效的性能著称&#xff0c;特别适合处理大型图像。资源绑定附上完整资料供读者参考学习&…...

【网络安全】 防火墙技术

防火墙是网络安全防御的重要组成部分&#xff0c;它的主要任务是阻止或限制不安全的网络通信。在这篇文章中&#xff0c;我们将详细介绍防火墙的工作原理&#xff0c;类型以及如何配置和使用防火墙。我们将尽可能使用简单的语言和实例&#xff0c;以便于初学者理解。 一、什么…...

关于Linux系统安装和优化的教程

书籍教程 《Linux 就该这么学》&#xff1a;涵盖多种 Linux 发行版的安装知识&#xff0c;从安装前硬件检测&#xff08;如硬盘容量需至少 10GB、内存至少 2GB &#xff09;、软件源选择&#xff0c;到安装步骤&#xff08;如镜像烧录、启动设置、分区操作 &#xff09;都有详…...

还是主题混合程序设计

以下是针对您现有代码的完整主题化改造方案&#xff0c;实现跨QML/Qt Widgets的阴影主题系统&#xff1a; 一、主题管理系统核心 // thememanager.h #pragma once #include <QObject> #include <QColor> #include <QMap> #include <QQmlEngine>class…...

【FPGA开发】利用状态机思想点亮流水灯/初学hdlbitsFPGA教程网站

一、状态机思想介绍 状态机是一种用于描述系统行为的形式化模型&#xff0c;它将系统抽象为有限的状态&#xff0c;并通过状态转移来响应外部输入或事件。其核心思想是&#xff1a;系统在任何时刻只处于一个确定的状态&#xff0c;且在不同状态之间按规则切换。状态机是处理明…...

洛谷 P3214 [HNOI2011] 卡农

题目传送门 前言 再次败在 d p dp dp 手下&#xff0c;但是数据范围这么小应该是可以看出是 d p dp dp 的&#xff08;毕竟对于其他组合数的问题数据范围都是 1 0 9 10^9 109 起步&#xff09;。 思路 题意简化 现有 1 , 2 , 3 , . . . , n − 1 , n 1, 2, 3, ... , n -…...

智能体和RPA都需要程序思维,如何使用影刀的变量?

欢迎来到涛涛聊AI&#xff0c; 不管AI还是RPA&#xff0c;都需要用到编程思想才能完成批量工作。今天研究了下影刀的变量。 变量类型 根据变量值选择相应的类型&#xff0c;可选择任意一种影刀所支持的数据类型 变量值 指定变量中保存的值&#xff0c;会根据不同的类型设置…...

使用OpenFeign实现服务远程调用

在微服务架构中&#xff0c;由于业务功能的分工不同&#xff0c;我们把项目拆分为多个独立的服务&#xff0c;并常常将其部署在不同的服务器上&#xff0c;这个时候如果服务A的某个功能需要借助服务B来实现&#xff0c;那么这个时候如何去调用就成了问题&#xff0c;目前有一种…...

【移动计算】:AndroidStudio安装和项目搭建【2019:版本3.5.2】

文章目录 1. 下载安装包2. 安装包安装2.1 运行完exe进行安装选择Cancel&#xff1a; Unable SdkInstall Type选择Custom可以选择更新最新版本&#xff1a;这里不选择点击Next勾选 Android Sdk Platform API 虚拟设备选项显示已安装否则也需要勾选设置自定义安装地址&#xff1a…...

泡棉压缩对显示模组漏光的定位分析及论述

■背景 液晶LCD受到外力或者挤压后&#xff0c;比较容易出现漏光现象即显示mura。一般从结构设计的角度会做如下措施进行整改 1>控制背光和上铁框平整度 ; 2>合理设计液晶模组的厚度和边框大小 ; 3>承载液晶面板的泡棉选取 ; 4>FPC单双层区的设计 ; 5>合理…...

当AI助理接管云计算-走向智能运维的新时代

目录 时代背景 AI在云计算运维上的帮助 新时代产物&#xff1a;WatchAlert 新时代思考 时代背景 代理人工智能&#xff1a;自主决策的未来--Gartner2025十大顶级科技预测第一名 Gartner将代理人工智能列为2025年的顶级技术趋势。该技术通过快速分析用于药物发现的海量数据…...

Day2:前端项目uniapp壁纸实战

先来做一个轮番图。 效果如下&#xff1a; common-style.css view,swiper,swiper-item{box-sizing: border-box; } index.vue <template><view class"homeLayout"><view class"banner"><swiper circular indicator-dots autoplay…...

使用人工智能大模型DeepSeek,如何进行论文润色和去重?

今天我们学习人工智能&#xff0c;如何协助我们进行论文润色和去重。手把手的学习视频地址请访问https://edu.csdn.net/learn/40402/666422 第一步在腾讯元宝对话框中输入如何协助老师做论文润色&#xff0c;通过提问&#xff0c;我们了解了老师写论文润色的步骤和建议。润色的…...

为招聘推荐系统进行相应修改的 Python 实现方案(含协同过滤推荐算法)

下面是为招聘推荐系统进行相应修改的 Python 实现方案。首先是创建数据分析看板&#xff0c;这里借助 Streamlit 库来实现可视化&#xff1b;其次是将协同过滤推荐算法和其他算法&#xff08;这里采用基于内容的推荐算法&#xff09;结合&#xff0c;以此提升推荐效果。 impor…...

Spring Boot中自定义注解的创建与使用

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…...

算法思想之双指针(二)

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;算法思想之双指针二) 发布时间&#xff1a;2025.4.5 隶属专栏&#xff1a;算法 目录 双指针算法介绍对撞指针&#xff1a;快慢指针&#xff1a; 例题有效三角形的个数题目链接题目描述算法思路代码实现 查找总价格为…...

MySQL基础 [一] - 数据库基础

目录 什么是数据库 站在服务器角度理解 站在用户角度理解 为什么不直接使用文件存储呢&#xff1f; 主流数据库 MySQL的基本使用 数据库的使用样例 服务器管理 服务器数据库表之间的关系 MySQL的架构 MySQL语句分类 存储引擎 查看存储引擎 存储引擎对比 什么…...

智能合约的法律挑战与解决之道:技术与法律的交融

智能合约的法律挑战与解决之道&#xff1a;技术与法律的交融 智能合约的诞生&#xff0c;为区块链技术的应用打开了新的大门。从简单的自动化交易到复杂的去中心化自治组织&#xff08;DAO&#xff09;&#xff0c;智能合约正在推动全球经济迈向去信任化的新时代。然而&#x…...

MySQL基础 [一] - Ubuntu版本安装

目录 预安装 先查看自己操作系统的版本 添加MySQL APT下载源 下载 安装 正式安装 查看MySQL状态 打开MySQL 预安装 先查看自己操作系统的版本 lsb_release -a 添加MySQL APT下载源 下载 下载发布包 下载地址 : https://dev.mysql.com/downloads/repo/apt/ 这里下…...

cursor机器码重置

1、下载vscode插件 cursor-fake-machine-0.0.2 2、将插件拖入拓展 3、彻底将cursor账号退出 setting -> Manage -> 退出账号 4、打开cursor&#xff0c;ctrlshiftp &#xff0c;输入fake,点击确定...