20240227-Python Tkinter学习笔记

文章目录

  • Label标签
  • Label标签和Button按钮
  • Listbox列表
  • Radiobutton单选按钮
  • Scale滑动条
  • Checkbutton多选框
  • Canvas画布
  • Menubar 菜单
  • Frame框架
  • Messagebox弹窗
  • pack/grid/place 布局方式
  • 登录注册案例

Label标签

import tkinter as tk  # 导入tkinter模块,并简写为tk# 创建窗口对象
window = tk.Tk()# 设置窗口标题
window.title('My window')# 设置窗口大小
window.geometry('640x480')# 创建标签对象,并设置文本、背景色、字体和大小,以及标签的宽度和高度
l = tk.Label(window, text='OMG!This is TK!', bg='blue', font=('Arial', 12), width=15, height=2)# 将标签放置在窗口中
l.pack()# 进入主循环,等待窗口事件发生
window.mainloop()

Label标签和Button按钮

import tkinter as tk  # 导入tkinter模块,并简写为tk# 创建窗口对象
window = tk.Tk()# 设置窗口标题
window.title('My window')# 设置窗口大小
window.geometry('640x480')# 定义一个字符串类型的变量
var = tk.StringVar()# 创建标签对象,使用textvariable参数绑定变量,使标签内容可以动态改变
l = tk.Label(window, textvariable=var, bg='blue', font=('Arial', 12), width=15, height=2)# 将标签放置在窗口中
l.pack()# 初始化一个标志变量,表示按钮是否被点击过
on_hit = False# 定义按钮点击事件函数
def hit_me():global on_hit# 判断按钮是否被点击过if on_hit == False:on_hit = Truevar.set('You hit me!')  # 设置标签变量的值为'You hit me!'else:on_hit = Falsevar.set('')  # 清空标签变量的值# 创建按钮对象,并设置按钮文本、宽度、高度以及点击事件处理函数
b = tk.Button(window, text='hit me!', width=15, height=2, command=hit_me)# 将按钮放置在窗口中
b.pack()# 进入主循环,等待窗口事件发生
window.mainloop()

Listbox列表

import tkinter as tk  # 导入tkinter模块,并简写为tk# 创建窗口对象
window = tk.Tk()# 设置窗口标题
window.title('My window')# 设置窗口大小
window.geometry('640x480')# 定义一个字符串类型的变量
var = tk.StringVar()# 创建标签对象,设置背景色为黄色,宽度为16,并使用textvariable参数绑定变量
l = tk.Label(window, bg='yellow', width=16, textvariable=var)# 将标签放置在窗口中
l.pack()# 定义打印选择的函数
def print_selection():# 判断用户是否已经选择了列表框中的项if lb.curselection():# 获取当前选择的值value = lb.get(lb.curselection())# 设置标签变量的值为当前选择的值var.set(value)else:# 提示用户未选择任何项var.set("Please select an item!")# 创建按钮对象,并设置按钮文本、宽度、高度以及点击事件处理函数
b1 = tk.Button(window, text='Print selection', width=15, height=2, command=print_selection)# 将按钮放置在窗口中
b1.pack()# 定义一个字符串类型的变量,并设置初始值为元组
var2 = tk.StringVar()
var2.set((11, 22, 33, 44))# 创建列表框对象,使用listvariable参数绑定变量
lb = tk.Listbox(window, listvariable=var2)list_items = [1, 2, 3, 4]# 遍历列表,向列表框中插入元素
for item in list_items:lb.insert('end', item)lb.insert(1, 'first')  # 在索引1处插入元素'first'
lb.delete(3)  # 删除索引3处的元素# 将列表框放置在窗口中
lb.pack()# 进入主循环,等待窗口事件发生
window.mainloop()

Radiobutton单选按钮

import tkinter as tk  # 导入tkinter模块,并简写为tk# 创建窗口对象
window = tk.Tk()# 设置窗口标题
window.title('My window')# 设置窗口大小
window.geometry('640x480')# 定义两个字符串类型的变量,并设置初始值为None
var_group1 = tk.StringVar()
var_group2 = tk.StringVar()# 创建标签对象,设置背景色为黄色,宽度为32,并初始化文本内容为'Empty'
l = tk.Label(window, bg='yellow', width=32, text='Empty')# 将标签放置在窗口中
l.pack()# 定义打印选择的函数
def print_selection():# 将标签的文本设置为所选项的值l.config(text='Your have selected '+var_group1.get())# 创建第一组单选按钮对象,设置文本、选项值、变量、点击事件处理函数
r1_group1 = tk.Radiobutton(window, text='Option A', variable=var_group1, value="A", command=print_selection)
r1_group1.pack()r2_group1 = tk.Radiobutton(window, text='Option B', variable=var_group1, value="B", command=print_selection)
r2_group1.pack()r3_group1 = tk.Radiobutton(window, text='Option C', variable=var_group1, value="C", command=print_selection)
r3_group1.pack()# 创建第二组单选按钮对象,设置文本、选项值、变量、点击事件处理函数
r1_group2 = tk.Radiobutton(window, text='Option X', variable=var_group2, value="X", command=print_selection)
r1_group2.pack()r2_group2 = tk.Radiobutton(window, text='Option Y', variable=var_group2, value="Y", command=print_selection)
r2_group2.pack()r3_group2 = tk.Radiobutton(window, text='Option Z', variable=var_group2, value="Z", command=print_selection)
r3_group2.pack()# 进入主循环,等待窗口事件发生
window.mainloop()

Scale滑动条

import tkinter as tk  # 导入tkinter模块,并简写为tk# 创建窗口对象
window = tk.Tk()# 设置窗口标题
window.title('My window')# 设置窗口大小
window.geometry('640x480')# 创建标签对象,设置背景色为黄色,宽度为32,并初始化文本内容为'Empty'
l = tk.Label(window, bg='yellow', width=32, text='Empty')# 将标签放置在窗口中
l.pack()# 定义打印选择的函数,该函数接受一个参数v,表示滑动条的当前值
def print_selection(v):l.config(text='Your have selected '+ v)  # 更新标签文本为所选择的值# 创建水平滑动条对象,设置标签、范围、方向、长度、显示值、刻度间隔、分辨率以及回调函数
s = tk.Scale(window, label='Name', from_=0, to=10, orient=tk.HORIZONTAL, length=200, showvalue=1, tickinterval=2, resolution=0.01, command=print_selection)# 将滑动条放置在窗口中
s.pack()# 进入主循环,等待窗口事件发生
window.mainloop()

Checkbutton多选框

import tkinter as tk  # 导入tkinter模块,并简写为tk# 创建窗口对象
window = tk.Tk()# 设置窗口标题
window.title('My window')# 设置窗口大小
window.geometry('640x480')# 创建标签对象,设置背景色为黄色,宽度为32,并初始化文本内容为'Empty'
l = tk.Label(window, bg='yellow', width=32, text='Empty')# 将标签放置在窗口中
l.pack()# 定义打印选择的函数
def print_selection():# 判断勾选情况并更新标签文本if var1.get() == 1 and var2.get() == 0:l.config(text='I love only Python')elif var1.get() == 0 and var2.get() == 1:l.config(text='I love only C++')elif var1.get() == 0 and var2.get() == 0:l.config(text='I do not love either')else:l.config(text='I love both')# 定义两个整型变量,用于存储勾选状态
var1 = tk.IntVar()
var2 = tk.IntVar()# 创建复选框对象,设置文本、变量、勾选值、取消勾选值、点击事件处理函数
c1 = tk.Checkbutton(window, text='Python', variable=var1, onvalue=1, offvalue=0, command=print_selection)
c1.pack()c2 = tk.Checkbutton(window, text='C++', variable=var2, onvalue=1, offvalue=0, command=print_selection)
c2.pack()# 进入主循环,等待窗口事件发生
window.mainloop()

Canvas画布

import tkinter as tk  # 导入tkinter模块,并简写为tk# 创建窗口对象
window = tk.Tk()# 设置窗口标题
window.title('My window')# 设置窗口大小
window.geometry('640x480')# 创建Canvas对象,设置背景色为黄色,高度为320,宽度为240
canvas = tk.Canvas(window, bg='yellow', height=320, width=240)# 加载图片文件
image_file = tk.PhotoImage(file='2.png')# 调整图片大小为原来的二十分之一
image_file = image_file.subsample(20, 20)# 在Canvas上创建图片对象
image = canvas.create_image(0, 0, anchor='nw', image=image_file)# 定义一些形状的坐标
x0, y0, x1, y1 = 50, 50, 80, 80# 在Canvas上创建线对象
line = canvas.create_line(x0, y0, x1, y1)# 在Canvas上创建椭圆对象
oval = canvas.create_oval(x0, y0, x1, y1, fill='red')# 在Canvas上创建弧线对象
arc = canvas.create_arc(x0 + 50, y0 + 50, x1 + 50, y1 + 50, start=0, extent=180)# 在Canvas上创建矩形对象
rect = canvas.create_rectangle(50, 50, 100, 100)# 将Canvas放置在窗口中
canvas.pack()# 定义一个移动矩形的函数
def movement():canvas.move(rect, 0, 2)# 创建按钮,点击时调用movement函数
b = tk.Button(window, text='move', command=movement)
b.pack()# 进入主循环,等待窗口事件发生
window.mainloop()

Menubar 菜单

import tkinter as tk  # 导入tkinter模块,并简写为tk# 创建窗口对象
window = tk.Tk()# 设置窗口标题
window.title('My window')# 设置窗口大小
window.geometry('640x480')# 创建标签对象,文本为空,宽度为32,背景色为黄色
l = tk.Label(window, text='', width=32, bg='yellow')# 将标签放置在窗口中
l.pack()# 定义一个全局变量,用于记录按钮点击次数
count = 0# 定义按钮点击事件处理函数
def do_job():global count# 更新标签文本为按钮点击次数l.config(text='do ' + str(count))count += 1# 创建菜单栏对象
menubar = tk.Menu(window)# 创建文件菜单对象,设置tearoff参数为0
filemenu = tk.Menu(menubar, tearoff=0)# 将文件菜单添加到菜单栏中,并设置标签为'File'
menubar.add_cascade(label='File', menu=filemenu)# 在文件菜单中添加命令项,设置命令为do_job函数
filemenu.add_command(label='New', command=do_job)
filemenu.add_command(label='Open', command=do_job)
filemenu.add_command(label='Save', command=do_job)# 创建子菜单对象
submenu = tk.Menu(filemenu, tearoff=0)# 在文件菜单中添加一个级联的子菜单,设置标签为'Import'
filemenu.add_cascade(label="Import", menu=submenu, underline=0)# 在子菜单中添加命令项,设置命令为do_job函数
submenu.add_command(label='Submenu1', command=do_job)# 在文件菜单中添加一个分隔符
filemenu.add_separator()# 在文件菜单中添加退出命令项,设置命令为窗口的quit方法
filemenu.add_command(label='Exit', command=window.quit)# 将菜单栏添加到窗口中
window.config(menu=menubar)# 进入主循环,等待窗口事件发生
window.mainloop()

Frame框架

import tkinter as tk  # 导入tkinter模块,并简写为tk# 创建窗口对象
window = tk.Tk()# 设置窗口标题
window.title('My window')# 设置窗口大小
window.geometry('640x480')# 在窗口上添加一个标签,显示文本'On the window'
tk.Label(window, text='On the window').pack()# 创建一个框架对象frm
frm = tk.Frame(window)# 将框架放置在窗口中
frm.pack()# 创建两个子框架,frm_l放在左侧,frm_r放在右侧
frm_l = tk.Frame(frm)
frm_r = tk.Frame(frm)# 将左右两个子框架放置在主框架中,左右排列
frm_l.pack(side='left')
frm_r.pack(side='right')# 在左侧子框架frm_l上添加三个标签,分别显示不同的文本和背景颜色
tk.Label(frm_l, text='On the frm_l1', bg='red').pack()
tk.Label(frm_l, text='On the frm_l2', bg='green').pack()
tk.Label(frm_l, text='On the frm_l3', bg='blue').pack()# 在右侧子框架frm_r上添加一个标签,显示文本'On the frm_r1',背景颜色为黄色
tk.Label(frm_r, text='On the frm_r1', bg='yellow').pack()# 进入主循环,等待窗口事件发生
window.mainloop()

Messagebox弹窗

import tkinter as tk  # 导入tkinter模块,并简写为tk
from tkinter import messagebox  # 导入messagebox子模块# 创建窗口对象
window = tk.Tk()# 设置窗口标题
window.title('My window')# 设置窗口大小
window.geometry('640x480')# 定义一个函数,用于点击按钮时弹出信息框
def hit_me():# 使用messagebox模块的showinfo方法弹出信息框# messagebox.showinfo(title='Hi', message='hahahahaha') # 显示一般信息框。# messagebox.showwarning(title='Hi', message='nonononono') # 显示警告信息框。# messagebox.showerror(title='Hi', message='hahahahaha') # 显示错误信息框。# print(messagebox.askquestion(title='Hi', message='hahahahaha')) # 显示一个包含问题的对话框,返回用户的回答。# print(messagebox.askyesno(title='Hi', message='hahahahaha')) # 显示一个包含Yes和No的对话框,返回用户的选择。# print(messagebox.askokcancel(title='Hi', message='hahahahaha')) # 显示一个包含OK和Cancel的对话框,返回用户的选择。print(messagebox.askretrycancel(title='Hi', message='hahahahaha')) # 显示一个包含Retry和Cancel的对话框,返回用户的选择。# 创建一个按钮,点击时调用one函数
tk.Button(window, text='Hit me', command=hit_me).pack()# 进入主循环,等待窗口事件发生
window.mainloop()

pack/grid/place 布局方式

import tkinter as tk  # 导入tkinter模块,并简写为tk
from tkinter import messagebox  # 导入messagebox子模块# 创建窗口对象
window = tk.Tk()# 设置窗口标题
window.title('My window')# 设置窗口大小
window.geometry('640x480')# tk.Label(window,text=1).pack(side='top')
# tk.Label(window,text=4).pack(side='bottom')
# tk.Label(window,text=2).pack(side='left')
# tk.Label(window,text=3).pack(side='right')# for i in range(4):
#     for j in range(3):
#         tk.Label(window,text='A').grid(row=i,column=j,padx=10,pady=10)# 创建一个标签,并使用place布局管理器指定其位置
tk.Label(window,text=3).place(x=10,y=100,anchor='nw')# 进入主循环,等待窗口事件发生
window.mainloop()

登录注册案例

import pickle
import tkinter as tk  # 导入tkinter模块,并简写为tk
from tkinter import messagebox  # 导入messagebox子模块# 创建窗口对象
window = tk.Tk()# 设置窗口标题
window.title('登录窗口')# 设置窗口大小
window.geometry('640x480')# 创建画布,并在顶部放置图像
canvas = tk.Canvas(window, height=200, width=640, background='yellow')
image_file = tk.PhotoImage(file='2.png')
image_file = image_file.subsample(4, 4)  # 缩小图片
image = canvas.create_image(150, 25, anchor='nw', image=image_file)
canvas.pack(side='top')# 标签和输入框用于输入用户名和密码
tk.Label(window, text='User name: ').place(x=200, y=250)
tk.Label(window, text='Password: ').place(x=200, y=290)# 创建StringVar对象,用于存储用户名和密码
var_user_name = tk.StringVar()
var_user_name.set('example@python.com')# 输入用户名的文本框
entry_user_name = tk.Entry(window, textvariable=var_user_name)
entry_user_name.place(x=300, y=250)# 输入密码的文本框,密码以星号显示
var_user_pwd = tk.StringVar()
entry_user_pwd = tk.Entry(window, textvariable=var_user_pwd, show='*')
entry_user_pwd.place(x=300, y=290)# 用户登录函数
def user_login():user_name = var_user_name.get()  # 获取输入的用户名user_pwd = var_user_pwd.get()  # 获取输入的密码try:# 尝试读取用户信息文件with open('users_info.pickle', 'rb') as user_file:users_info = pickle.load(user_file)except FileNotFoundError:# 如果文件不存在,则创建一个新的文件,并添加一个默认的管理员用户with open('users_info.pickle', 'wb') as user_file:users_info = {'admin': 'admin'}pickle.dump(users_info, user_file)# 检查用户名和密码是否正确if user_name in users_info:if user_pwd == users_info[user_name]:messagebox.showinfo('Welcome', 'How are you?' + user_name)else:messagebox.showerror('Error!', 'Your password is wrong, try again?')else:# 如果用户名不存在,提示用户是否注册新账户is_sign_up = messagebox.askyesno('Welcome', 'You have not signed up yet. Sign up today?')if is_sign_up:user_sign_up()# 登录按钮
btn_login = tk.Button(window, text='Login', command=user_login)
btn_login.place(x=250, y=350)# 用户注册函数
def user_sign_up():def sign():np = new_pwd.get()  # 获取输入的新密码npc = new_pwd_confirm.get()  # 获取输入的确认密码nn = new_name.get()  # 获取输入的新用户名# 读取现有的用户信息with open('users_info.pickle', 'rb') as user_file:exist_users_info = pickle.load(user_file)# 检查密码是否一致,用户名是否已经存在if np != npc:messagebox.showerror('Error', 'Password and confirm password must be the same!')elif nn in exist_users_info:messagebox.showerror('Error', 'The user has already signed up!')else:# 注册新用户并保存到文件中exist_users_info[nn] = npwith open('users_info.pickle', 'wb') as user_file:pickle.dump(exist_users_info, user_file)messagebox.showinfo('Welcome', 'You have successfully signed up!')window_sign_up.destroy()window_sign_up = tk.Toplevel(window)  # 创建一个新的顶层窗口window_sign_up.geometry('350x200')  # 设置窗口大小window_sign_up.title('注册界面')  # 设置窗口标题# 新用户名输入框new_name = tk.StringVar()new_name.set('example@python.com')tk.Label(window_sign_up, text='User name: ').place(x=10, y=10)entry_new_name = tk.Entry(window_sign_up, textvariable=new_name)entry_new_name.place(x=150, y=10)# 新密码输入框new_pwd = tk.StringVar()tk.Label(window_sign_up, text='Password: ').place(x=10, y=50)entry_new_pwd = tk.Entry(window_sign_up, textvariable=new_pwd, show='*')entry_new_pwd.place(x=150, y=50)# 确认密码输入框new_pwd_confirm = tk.StringVar()tk.Label(window_sign_up, text='Confirm password: ').place(x=10, y=90)entry_new_pwd_confirm = tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show='*')entry_new_pwd_confirm.place(x=150, y=90)# 确认注册按钮btn_confirm_sign_up = tk.Button(window_sign_up, text='Sign up', command=sign)btn_confirm_sign_up.place(x=150, y=130)# 注册按钮
btn_sign_up = tk.Button(window, text='Sign up', command=user_sign_up)
btn_sign_up.place(x=350, y=350)# 进入主循环,等待窗口事件发生
window.mainloop()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql数据库安装与使用(一)

目录 前言 一,安装mysql数据库 二,mysql数据库使用 连接mysql数据库 创建数据库 创建表格 插入数据 查询数据 更新数据 删除数据 关闭连接 使用数据库 查看所有数据库 查看数据库中的表 三,mysql设置 创建用户 授予权限 刷新权…

全量知识系统问题及SmartChat给出的答复 之3

Q8. 进一步,请展示如何使用这些技术来衡量、评估或适应不可避免的不匹配的知识汤问题的更进一步的全面代码。 为了处理不可避免的不匹配的知识汤问题,我们可以引入一些技术方法来衡量、评估或适应这种情况。 下是一个更进一步的全面代码示例&#xff0…

代码随想录算法训练营Day30|332.重新安排行程、51. N皇后、37. 解数独

332.重新安排行程 题目链接&#xff1a;332.重新安排行程 文档链接&#xff1a;332.重新安排行程 C实现 class Solution { private:unordered_map<string,map<string,int>> targets;bool backtracking(int ticketNum, vector<string>& result) {if(resu…

怎么制作文件类型二维码?文件二维码如何加密?

现在将文件转二维码图片后&#xff0c;分享生成二维码来扫码查看或者下载文件的方式&#xff0c;在很多的场景中都有应用。这个方法的优势在于&#xff0c;成本低而且安全性高&#xff0c;有利于用户快速获取内容的速度&#xff0c;有效提高用户体验&#xff0c;而且日常使用的…

【Kubernetes】服务(Service)是什么?有什么用?有哪些类型?

系列文章目录 K8s中的Namespace是什么&#xff1f; Kubernetes 集群的组件介绍 Kubernetes 对象是什么&#xff1f; Pod——k8s中最重要的对象之一 Kubernetes 和 Docker 之间有什么区别&#xff1f; 部署安装 K8s 为什么要关闭 swap 分区&#xff1f; k8s中容器之间、pod之间…

ZABBIX修改web界面的 “支持“,“帮助”,“Integrations“。等菜单按钮,百试百灵,删除修改Help,Support菜单

♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ **ZABBIX修改web界面的 “支持”&#xff0c;“帮助”,“Integrations”。等菜单按钮&#xff0c…

基于 Transformer 的中文对联生成器

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

javaWeb学习04

AOP核心概念: 连接点: JoinPoint, 可以被AOP控制的方法 通知: Advice 指哪些重复的逻辑&#xff0c;也就是共性功能(最终体现为一个方法) 切入点: PointCut, 匹配连接点的条件&#xff0c;通知仅会在切入点方法执行时被应用 目标对象: Target, 通知所应用的对象 通知类…

模糊PID控制算法实战讲解-案例温度控制(附C语言实现)

可结合之前的文章一起理解&#xff1a; 控制算法-PID算法总结-从公式原理到参数整定解析&#xff08;附C源码&#xff09;_pid自整定算法-CSDN博客 模糊控制算法实战讲解-案例温度控制&#xff08;附C语言实现&#xff09;-CSDN博客 目录 一、模糊PID控制的原理 1.1 模糊化…

边读 Emacs Lisp Intro 边做题(五)

文章目录 边读Emacs Lisp Intro边做题&#xff08;五&#xff09; 边读Emacs Lisp Intro边做题&#xff08;五&#xff09; 打开emacs&#xff0c;按C-h i打开Info页&#xff0c;找到Emacs Lisp Intro。 这里的\\b\\([^ \n\t]\\)[ \n\t]\\1\\b抄自题目描述中提供的链接&#…

Decision Transformer

DT个人理解 emmm, 这里的Transformer 就和最近接触到的whisper一样,比起传统Transformer,自己还设计了针对特殊情况的tokens。比如whisper里对SOT,起始时间,语言种类等都指定了特殊tokens去做Decoder的输入和输出。 DT这里的作为输入的Tokens由RL里喜闻乐见的历史数据:…

Java优先级队列--堆

目录 1. 优先级队列 1.1 概念 2.优先级队列的模拟实现 2.1 堆的概念 2.2 堆的存储方式 2.3 堆的创建 2.3.1 堆向下调整 2.3.2 堆的创建 2.3.3 建堆的时间复杂度 2.4 堆的插入与删除 2.4.1 堆的插入 2.4.2 堆的删除 2.5 用堆模拟实现优先级队列 3.常用接口介绍 3…

Eigen-Block块操作

Block块操作 一、使用块操作二、列和行三、Corner-related操作四、向量的块运算 块是矩阵或数组的矩形部分。块表达式既可以用作右值&#xff0c;也可以用作左值。与通常的Eigen表达式一样&#xff0c;只要让编译器进行优化&#xff0c;这种抽象的运行时成本为零。优化都是自动…

什么是VR紧急情况模拟|消防应急虚拟展馆|VR游戏体验馆加盟

VR紧急情况模拟是利用虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;技术来模拟各种紧急情况和应急场景的训练和演练。通过VR技术&#xff0c;用户可以身临其境地体验各种紧急情况&#xff0c;如火灾、地震、交通事故等&#xff0c;以及应对这些紧急情况的…

贪心算法(算法竞赛、蓝桥杯)--修理牛棚

1、B站视频链接&#xff1a;A27 贪心算法 P1209 [USACO1.3] 修理牛棚_哔哩哔哩_bilibili 题目链接&#xff1a;[USACO1.3] 修理牛棚 Barn Repair - 洛谷 #include <bits/stdc.h> using namespace std; const int N205; int m,s,c,ans; int a[N];//牛的位置标号 int d[N…

奇怪的需求之与图片做交互

1.起因 客户想要展示自己的地图,该地图上有各种工作数据,和工作点位,已有的地图不能满足需求.于是提出将这张图片当成大背景 2.经过 鉴于文件格式和尺寸的原因,协商后客户提出将图片做成缩放效果,同时具有点击效果,原先直接进入的主页,现在为点击图片中的某条线路进入主页面…

Ubuntu tesseract使用全是干货

文字检测 方案 利用opencv二值化处理。最后检测使用google的开源库libtesseract识别文字。 tesseract安装 apt install libtesseract-dev # 前面那个是英文&#xff0c;后面那个是中文 apt install tesseract-oct tesseract-ocr-chi-sim手册 手册 qt creator中使用 pro文…

[LeetCode]143.重排链表

143. 重排链表 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/reorder-list/description/ 题目 示例 解题思路 寻找链表中点 链表逆序 合并链表 注意到目标链表即为将原链表的左半端和反转后的右半端合并后的结果。 这样我们的任务即可划分为三步&a…

Redis 8种基本数据类型及常用命令和数据类型的应用场景

小伙伴们好&#xff0c;欢迎关注&#xff0c;一起学习&#xff0c;无限进步 文章内容为学习的一些笔记及工作中遇到的一些问题 文章目录 Redis 五大数据类型keyStringListSetHashSorted Set 三种特殊类型Geospatial 地理位置HyperloglogBitmap Redis 五大数据类型 redis 官方网…

Python中的os库

一.OS库简介 OS是Operating System的简写&#xff0c;即操作系统。 OS库是一个操作系统接口模块&#xff0c;提供一些方便使用操作系统相关功能的函数。 二.OS库常用函数 2.1文件和目录 2.1.1&#xff1a;os.getcwd() 作用&#xff1a;返回当前工作目录&#xff0c;结果是…