浔川AI3款产品同步上线——浔川AI社

第一款:浔川AI翻译v3.0

正式代码:

# -*- coding: utf-8 -*-
import tkinter as tk
import tkinter.messagebox
import pickle
import random# 窗口
window = tk.Tk()
window.title('AI翻译登录界面')
window.geometry('450x200')
# 画布放置图片
# canvas=tk.Canvas(window,height=300,width=500)
# imagefile=tk.PhotoImage(file='qm.png')
# image=canvas.create_image(0,0,anchor='nw',image=imagefile)
# canvas.pack(side='top')
# 标签 用户名密码
Verification_Code = random.randint(1000, 9999)#设置一个随机的四位数
Verification_Code = str(Verification_Code)#把类型转换为str型
print(type(Verification_Code))
tk.Label(window, text='用户名:').place(x=100, y=30)
tk.Label(window, text='密码:').place(x=100, y=70)
tk.Label(window, text='验证码').place(x=100, y=110)
tk.Label(window, text=Verification_Code).place(x=320, y=110)
# 用户名输入框
var_usr_name = tk.StringVar()
entry_usr_name = tk.Entry(window, textvariable=var_usr_name)
entry_usr_name.place(x=160, y=30)
# 密码输入框
var_usr_pwd = tk.StringVar()
entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*')
entry_usr_pwd.place(x=160, y=70)
#验证码输入框
var_usr_yzm = tk.StringVar()
entry_usr_yzm = tk.Entry(window, textvariable=var_usr_yzm)
entry_usr_yzm.place(x=160, y=110)# 登录函数
def usr_log_in():# 输入框获取用户名密码usr_name = var_usr_name.get()usr_pwd = var_usr_pwd.get()usr_yzm = var_usr_yzm.get()#测试类型print(type(usr_yzm),type(Verification_Code))# 从本地字典获取用户信息,如果没有则新建本地数据库try:with open('usr_info.pickle', 'rb') as usr_file:usrs_info = pickle.load(usr_file)except FileNotFoundError:with open('usr_info.pickle', 'wb') as usr_file:usrs_info = {'admin': 'admin'}pickle.dump(usrs_info, usr_file)# 判断验证码是否正确用户名和密码是否匹配if usr_yzm == Verification_Code:if usr_name in usrs_info:if usr_pwd == usrs_info[usr_name]:tk.messagebox.showinfo(title='welcome',message='欢迎您:' + usr_name)else:tk.messagebox.showerror(message='密码错误')# 用户名密码不能为空elif usr_name == '' or usr_pwd == '':tk.messagebox.showerror(message='用户名或密码为空')# 不在数据库中弹出是否注册的框else:is_signup = tk.messagebox.askyesno('欢迎', '您还没有注册,是否现在注册')if is_signup:usr_sign_up()elif usr_yzm == '':tk.messagebox.showerror(message='验证码不能为空')else:tk.messagebox.showerror(message='验证码有误!')# 注册函数
def usr_sign_up():# 确认注册时的相应函数def signtowcg():# 获取输入框内的内容nn = new_name.get()np = new_pwd.get()npf = new_pwd_confirm.get()# 本地加载已有用户信息,如果没有则已有用户信息为空try:with open('usr_info.pickle', 'rb') as usr_file:exist_usr_info = pickle.load(usr_file)except FileNotFoundError:exist_usr_info = {}# 检查用户名存在、密码为空、密码前后不一致if nn in exist_usr_info:tk.messagebox.showerror('错误', '用户名已存在')elif np == '' or nn == '':tk.messagebox.showerror('错误', '用户名或密码为空')elif np != npf:tk.messagebox.showerror('错误', '密码前后不一致')# 注册信息没有问题则将用户名密码写入数据库else:exist_usr_info[nn] = npwith open('usr_info.pickle', 'wb') as usr_file:pickle.dump(exist_usr_info, usr_file)tk.messagebox.showinfo('欢迎', '注册成功')# 注册成功关闭注册框window_sign_up.destroy()# 新建注册界面window_sign_up = tk.Toplevel(window)window_sign_up.geometry('350x200')window_sign_up.title('注册')# 用户名变量及标签、输入框new_name = tk.StringVar()tk.Label(window_sign_up, text='用户名:').place(x=10, y=10)tk.Entry(window_sign_up, textvariable=new_name).place(x=150, y=10)# 密码变量及标签、输入框new_pwd = tk.StringVar()tk.Label(window_sign_up, text='请输入密码:').place(x=10, y=50)tk.Entry(window_sign_up, textvariable=new_pwd, show='*').place(x=150, y=50)# 重复密码变量及标签、输入框new_pwd_confirm = tk.StringVar()tk.Label(window_sign_up, text='请再次输入密码:').place(x=10, y=90)tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show='*').place(x=150, y=90)# 确认注册按钮及位置bt_confirm_sign_up = tk.Button(window_sign_up, text='确认注册',command=signtowcg)bt_confirm_sign_up.place(x=150, y=130)# 退出的函数
def usr_sign_quit():window.destroy()# 登录 注册按钮
bt_login = tk.Button(window, text='登录', command=usr_log_in)
bt_login.place(x=140, y=150)
bt_logup = tk.Button(window, text='注册', command=usr_sign_up)
bt_logup.place(x=210, y=150)
bt_logquit = tk.Button(window, text='退出', command=usr_sign_quit)
bt_logquit.place(x=280, y=150)
# 主循环
window.mainloop()
import tkinter as tk
import time# 创建主窗口
window = tk.Tk()
window.title('AI翻译下载')
window.geometry('630x150')# 设置下载进度条
tk.Label(window, text='下载进度:', ).place(x=50, y=60)
canvas = tk.Canvas(window, width=465, height=22, bg="white")
canvas.place(x=110, y=60)# 显示下载进度
def progress():# 填充进度条fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="green")x = 500  # 未知变量,可更改n = 465 / x  # 465是矩形填充满的次数for i in range(x):n = n + 465 / xcanvas.coords(fill_line, (0, 0, n, 60))window.update()time.sleep(0.02)  # 控制进度条流动的速度# 清空进度条fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="white")x = 500  # 未知变量,可更改n = 465 / x  # 465是矩形填充满的次数for t in range(x):n = n + 465 / x# 以矩形的长度作为变量值更新canvas.coords(fill_line, (0, 0, n, 60))window.update()time.sleep(0)  # 时间为0,即飞速清空进度条btn_download = tk.Button(window, text='开始下载', command=progress)
btn_download.place(x=400, y=105)window.mainloop()import tkinter as tk
import time# 创建主窗口
window = tk.Tk()
window.title('AI翻译安装')
window.geometry('630x150')# 设置下载进度条
tk.Label(window, text='安装进度:', ).place(x=50, y=60)
canvas = tk.Canvas(window, width=465, height=22, bg="white")
canvas.place(x=110, y=60)# 显示下载进度
def progress():# 填充进度条fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="green")x = 500  # 未知变量,可更改n = 465 / x  # 465是矩形填充满的次数for i in range(x):n = n + 465 / xcanvas.coords(fill_line, (0, 0, n, 60))window.update()time.sleep(0.02)  # 控制进度条流动的速度# 清空进度条fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="white")x = 500  # 未知变量,可更改n = 465 / x  # 465是矩形填充满的次数for t in range(x):n = n + 465 / x# 以矩形的长度作为变量值更新canvas.coords(fill_line, (0, 0, n, 60))window.update()time.sleep(0)  # 时间为0,即飞速清空进度条btn_download = tk.Button(window, text='开始安装', command=progress)
btn_download.place(x=400, y=105)window.mainloop()import tkinter as tk
import time
from tkinter import *
from tkinter import messagebox
import http.client
import hashlib
import json
import urllib.parse
import random#AI翻译
# 创建窗口
root = Tk()
# 标题
root.title('浔川AI翻译3.0')
# 窗口大小
root.geometry('370x200')
# 获取屏幕宽
s_with = root.winfo_screenwidth()
# 获取屏幕高度
s_height = root.winfo_screenheight()# 计算页面打开在屏幕中央的位置
l_x = str(round((s_with - 370) / 2))
l_y = str(round((s_height - 100) / 2))
root.geometry('+' + l_x + '+' + l_y)# add by 0730
def setRadio1():root.title("汉译英")print(v.get())
def setRadio2():root.title("英译汉")print(v.get())#可以通过传入特定参数直接和一个程序变量绑定, 这些参数包括: variable, textvariable, onvalue, offvalue, value.
v = IntVar() #保存一个整型变量, 默认值为0
radio1=Radiobutton(root,text="汉译英",variable=v,value=1,command=setRadio1)
radio1.grid()
# 输入控件
entry = Entry(root, font=('微软雅黑', 15))
# entry.grid(row=0, column=1)
radio2=Radiobutton(root,text="英译汉",variable=v,value=2,command=setRadio2)
radio2.grid()
entry = Entry(root, font=('微软雅黑', 15))
# entry.grid(row=0, column=2)
# 第一列标签
lable = Label(root, text='请输入内容:')
# 定位布局 grid网格式布局 pack包 place位置
lable.grid()
# 输入控件
entry = Entry(root, font=('微软雅黑', 15))
entry.grid(row=2, column=1)
res = StringVar() # 保存一个 string 类型变量, 默认值为""# 翻译结果标签
lable1 = Label(root, text='翻译结果:')
lable1.grid(row=3, column=0)
# 翻译结果输入框
entry1 = Entry(root, font=('微软雅黑', 15), textvariable=res)
entry1.grid(row=3, column=1)
def baidu_translate():#获取界面输入的内容content = entry.get().strip()# content = content.strip()# 判断输入翻译的内容是否为空if content == '':messagebox.showinfo('提示', '请输入翻译内容')else:appid = '20151113000005349'secretKey = 'osubCEzlGjzvw8qdQc41'# httpClient = Nonemyurl = '/api/trans/vip/translate'q = contentfromLang = 'zh'  # 源语言toLang = 'en'  # 翻译后的语言salt = random.randint(32768, 65536)sign = appid + q + str(salt) + secretKeysign = hashlib.md5(sign.encode()).hexdigest()#作为十六进制数据字符串值if(v.get()==1):myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(salt) + '&sign=' + signelse:myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + toLang + '&to=' + fromLang + '&salt=' + str(salt) + '&sign=' + signtry:httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')httpClient.request('GET', myurl)response = httpClient.getresponse()# response是HTTPResponse对象jsonResponse = response.read().decode("utf-8")  # 获得返回的结果,结果为json格式js = json.loads(jsonResponse)  # 将json格式的结果转换字典结构print(js)dst = str(js["trans_result"][0]["dst"])  # 取得翻译后的文本结果print(dst)  # 打印结果# return dstres.set(dst)except Exception as e:print('err:' + str(e))finally:if httpClient:httpClient.close()
# 按钮
button = Button(root, text='翻译', width='10', command=baidu_translate)
# sticky 对齐方式 N S W E 上下左右
button.grid(row=4, column=0, sticky=W)# 退出按钮 command是点击事件的方法
exit_button = Button(root, text='退出', width='10', command=root.quit)
exit_button.grid(row=4, column=1, sticky=E)# 显示窗口 消息循环 接收对窗口的所有操作的消息
# 主事件循环
root.mainloop()

第二款:浔川画板v5.1

正式代码:

# -*- coding: utf-8 -*-
import tkinter as tk
import tkinter.messagebox
import pickle
import random# 窗口
window = tk.Tk()
window.title('画板登录界面')
window.geometry('450x200')
# 画布放置图片
# canvas=tk.Canvas(window,height=300,width=500)
# imagefile=tk.PhotoImage(file='qm.png')
# image=canvas.create_image(0,0,anchor='nw',image=imagefile)
# canvas.pack(side='top')
# 标签 用户名密码
Verification_Code = random.randint(1000, 9999)#设置一个随机的四位数
Verification_Code = str(Verification_Code)#把类型转换为str型
print(type(Verification_Code))
tk.Label(window, text='用户名:').place(x=100, y=30)
tk.Label(window, text='密码:').place(x=100, y=70)
tk.Label(window, text='验证码').place(x=100, y=110)
tk.Label(window, text=Verification_Code).place(x=320, y=110)
# 用户名输入框
var_usr_name = tk.StringVar()
entry_usr_name = tk.Entry(window, textvariable=var_usr_name)
entry_usr_name.place(x=160, y=30)
# 密码输入框
var_usr_pwd = tk.StringVar()
entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*')
entry_usr_pwd.place(x=160, y=70)
#验证码输入框
var_usr_yzm = tk.StringVar()
entry_usr_yzm = tk.Entry(window, textvariable=var_usr_yzm)
entry_usr_yzm.place(x=160, y=110)# 登录函数
def usr_log_in():# 输入框获取用户名密码usr_name = var_usr_name.get()usr_pwd = var_usr_pwd.get()usr_yzm = var_usr_yzm.get()#测试类型print(type(usr_yzm),type(Verification_Code))# 从本地字典获取用户信息,如果没有则新建本地数据库try:with open('usr_info.pickle', 'rb') as usr_file:usrs_info = pickle.load(usr_file)except FileNotFoundError:with open('usr_info.pickle', 'wb') as usr_file:usrs_info = {'admin': 'admin'}pickle.dump(usrs_info, usr_file)# 判断验证码是否正确用户名和密码是否匹配if usr_yzm == Verification_Code:if usr_name in usrs_info:if usr_pwd == usrs_info[usr_name]:tk.messagebox.showinfo(title='welcome',message='欢迎您:' + usr_name)else:tk.messagebox.showerror(message='密码错误')# 用户名密码不能为空elif usr_name == '' or usr_pwd == '':tk.messagebox.showerror(message='用户名或密码为空')# 不在数据库中弹出是否注册的框else:is_signup = tk.messagebox.askyesno('欢迎', '您还没有注册,是否现在注册')if is_signup:usr_sign_up()elif usr_yzm == '':tk.messagebox.showerror(message='验证码不能为空')else:tk.messagebox.showerror(message='验证码有误!')# 注册函数
def usr_sign_up():# 确认注册时的相应函数def signtowcg():# 获取输入框内的内容nn = new_name.get()np = new_pwd.get()npf = new_pwd_confirm.get()# 本地加载已有用户信息,如果没有则已有用户信息为空try:with open('usr_info.pickle', 'rb') as usr_file:exist_usr_info = pickle.load(usr_file)except FileNotFoundError:exist_usr_info = {}# 检查用户名存在、密码为空、密码前后不一致if nn in exist_usr_info:tk.messagebox.showerror('错误', '用户名已存在')elif np == '' or nn == '':tk.messagebox.showerror('错误', '用户名或密码为空')elif np != npf:tk.messagebox.showerror('错误', '密码前后不一致')# 注册信息没有问题则将用户名密码写入数据库else:exist_usr_info[nn] = npwith open('usr_info.pickle', 'wb') as usr_file:pickle.dump(exist_usr_info, usr_file)tk.messagebox.showinfo('欢迎', '注册成功')# 注册成功关闭注册框window_sign_up.destroy()# 新建注册界面window_sign_up = tk.Toplevel(window)window_sign_up.geometry('350x200')window_sign_up.title('注册')# 用户名变量及标签、输入框new_name = tk.StringVar()tk.Label(window_sign_up, text='用户名:').place(x=10, y=10)tk.Entry(window_sign_up, textvariable=new_name).place(x=150, y=10)# 密码变量及标签、输入框new_pwd = tk.StringVar()tk.Label(window_sign_up, text='请输入密码:').place(x=10, y=50)tk.Entry(window_sign_up, textvariable=new_pwd, show='*').place(x=150, y=50)# 重复密码变量及标签、输入框new_pwd_confirm = tk.StringVar()tk.Label(window_sign_up, text='请再次输入密码:').place(x=10, y=90)tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show='*').place(x=150, y=90)# 确认注册按钮及位置bt_confirm_sign_up = tk.Button(window_sign_up, text='确认注册',command=signtowcg)bt_confirm_sign_up.place(x=150, y=130)# 退出的函数
def usr_sign_quit():window.destroy()# 登录 注册按钮
bt_login = tk.Button(window, text='登录', command=usr_log_in)
bt_login.place(x=140, y=150)
bt_logup = tk.Button(window, text='注册', command=usr_sign_up)
bt_logup.place(x=210, y=150)
bt_logquit = tk.Button(window, text='退出', command=usr_sign_quit)
bt_logquit.place(x=280, y=150)
# 主循环
window.mainloop()
import tkinter as tk
import time# 创建主窗口
window = tk.Tk()
window.title('画板下载')
window.geometry('630x150')# 设置下载进度条
tk.Label(window, text='下载进度:', ).place(x=50, y=60)
canvas = tk.Canvas(window, width=465, height=22, bg="white")
canvas.place(x=110, y=60)# 显示下载进度
def progress():# 填充进度条fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="green")x = 500  # 未知变量,可更改n = 465 / x  # 465是矩形填充满的次数for i in range(x):n = n + 465 / xcanvas.coords(fill_line, (0, 0, n, 60))window.update()time.sleep(0.02)  # 控制进度条流动的速度# 清空进度条fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="white")x = 500  # 未知变量,可更改n = 465 / x  # 465是矩形填充满的次数for t in range(x):n = n + 465 / x# 以矩形的长度作为变量值更新canvas.coords(fill_line, (0, 0, n, 60))window.update()time.sleep(0)  # 时间为0,即飞速清空进度条btn_download = tk.Button(window, text='开始下载', command=progress)
btn_download.place(x=400, y=105)window.mainloop()import tkinter as tk
import time# 创建主窗口
window = tk.Tk()
window.title('画板安装')
window.geometry('630x150')# 设置下载进度条
tk.Label(window, text='安装进度:', ).place(x=50, y=60)
canvas = tk.Canvas(window, width=465, height=22, bg="white")
canvas.place(x=110, y=60)# 显示下载进度
def progress():# 填充进度条fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="green")x = 500  # 未知变量,可更改n = 465 / x  # 465是矩形填充满的次数for i in range(x):n = n + 465 / xcanvas.coords(fill_line, (0, 0, n, 60))window.update()time.sleep(0.02)  # 控制进度条流动的速度# 清空进度条fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="white")x = 500  # 未知变量,可更改n = 465 / x  # 465是矩形填充满的次数for t in range(x):n = n + 465 / x# 以矩形的长度作为变量值更新canvas.coords(fill_line, (0, 0, n, 60))window.update()time.sleep(0)  # 时间为0,即飞速清空进度条btn_download = tk.Button(window, text='开始安装', command=progress)
btn_download.place(x=400, y=105)window.mainloop()"""使用tkinter的Canvas控件制作的画板程序, 支持新建、打开、编辑和保存文档.
A painter that made by tkinter in Python.It supports new, open, edit and save documents."""
import sys,os, pickle,json
import tkinter as tk
import tkinter.ttk as ttk
import tkinter.filedialog as dialog
import tkinter.messagebox as msgbox
from tkinter.colorchooser import askcolor
from copy import deepcopy
try:from PIL import ImageGrab
except:ImageGrab=None_ver="1.5"def _load_icon(window,filename):#为window加载图标for availble_path in sys.path+[os.path.split(__file__)[0]]:try:window.iconbitmap("%s\%s"%(availble_path,filename))except tk.TclError:passdef onerror(err,msg='',parent=None):#显示错误消息msgbox.showinfo(type(err).__name__,msg+str(err),parent=parent)class ScrolledCanvas(tk.Canvas):"""可滚动的画布,用法与默认的tkinter.Canvas完全相同.
继承自tkinter.Canvas类"""def __init__(self,master,**options):self.frame=tk.Frame(master)tk.Canvas.__init__(self,self.frame,**options)self.hscroll=ttk.Scrollbar(self.frame,orient=tk.HORIZONTAL,command=self.xview)self.vscroll=ttk.Scrollbar(self.frame,command=self.yview)self.configure(xscrollcommand=self.hscroll.set,yscrollcommand=self.vscroll.set)self._show_widgets()self.bind("<Configure>",self.adjustscrolls)self["scrollregion"]=(0,0,self["width"],self["height"])def _show_widgets(self,repack=False):if repack:self.pack_forget()self.vscroll.pack(side=tk.RIGHT,fill=tk.Y)self.hscroll.pack(side=tk.BOTTOM,fill=tk.X)tk.Canvas.pack(self,side=tk.BOTTOM,expand=True,fill=tk.BOTH)def pack(self,**options):self.frame.pack(**options)def grid(self,**options):self.frame.grid(**options)def place(self,**options):self.frame.place(**options)def forget(self):self.frame.forget()def adjustscrolls(self,event):region=self["scrollregion"].split()width,height=(int(region[2]),int(region[3]))if event.width>width:self.hscroll.pack_forget()else:self._show_widgets(repack=True)if event.height>height:self.vscroll.pack_forget()else:self._show_widgets(repack=True)class DictFile(dict):def __init__(self,filename=None,mode='r',encoding="utf-8",errors="strict",error_callback=None):dict.__init__(self)self.filename=filenameif not filename:returnwith open(filename,mode,encoding=encoding,errors=errors) as f:while True:try:texts=f.readline().split(":")if not texts[0]:break # 到文件结尾if len(texts)>1:self[texts[0]]=eval(texts[1],self)except Exception as err:if error_callback:error_callback(err)else:raisedef save(self,filename=None,error_callback=None):if not filename:if not self.filename:returnfilename=self.filenametry:with open(filename,'w',encoding="utf_8") as f:for key in self.keys():f.write("{}:{}\n".format(key,repr(self[key])))except Exception as err:if error_callback:error_callback(err)else:raisedef __iter__(self):return (key for key in dict.keys(self) if not key.startswith("__"))keys=__iter__@classmethoddef fromdict(cls,dict,filename=None,*args,**kwargs):new=cls(*args,**kwargs)new.filename=filenamefor key in dict.keys():new[key]=dict[key]return newclass PropertyWindow(tk.Toplevel):#文档属性窗口def __init__(self,master):self.master_=masterself.master=master.masterself.init_window()def init_window(self):tk.Toplevel.__init__(self)self.title("文档属性")self.withdraw()_load_icon(self,filename="property.ico")self.focus_force()#self.resizable(width=False,height=False)# 当⽗窗⼝隐藏后,窗⼝也跟随⽗窗⼝隐藏self.transient(self.master)self.bind_all("<Key-Return>",self.confirm)self.bind("<Destroy>",lambda event:setattr(self.master_,'propertywindow',None))self.create_widgets()self.state('normal')def create_widgets(self):#创建控件size=tk.Frame(self)tk.Label(size,text="宽度(像素):").pack(side=tk.LEFT)self.width=tk.StringVar(self)bd=int(self.master_.cv["bd"]) or 2 #画布的边框宽度self.width.set(self.master_.data.get("width",self.master_.cv.winfo_width()-bd*2))ttk.Entry(size,textvariable=self.width,width=10).pack(side=tk.LEFT)tk.Label(size,text="高度(像素):").pack(side=tk.LEFT)self.height=tk.StringVar(self)self.height.set(self.master_.data.get("height",self.master_.cv.winfo_height()-bd*2))ttk.Entry(size,textvariable=self.height,width=10).pack(side=tk.LEFT)size.pack(fill=tk.X,pady=2)ttk.Separator(self).pack(fill=tk.X,pady=2)backcolor=tk.Frame(self)tk.Label(backcolor,text="背景颜色:").pack(side=tk.LEFT)self.backcolor=tk.StringVar(self)self.backcolor.set(self.master_.data.get("backcolor",''))ttk.Entry(backcolor,textvariable=self.backcolor).pack(side=tk.LEFT)ttk.Button(backcolor,text="...",width=2,command=lambda:self.backcolor.set(askcolor(master=self)[1] or self.backcolor.get())).pack(side=tk.LEFT)backcolor.pack(fill=tk.X,pady=2)strokecolor=tk.Frame(self)tk.Label(strokecolor,text="画笔颜色:").pack(side=tk.LEFT)self.strokecolor=tk.StringVar(self)self.strokecolor.set(self.master_.data.get("strokecolor",''))ttk.Entry(strokecolor,textvariable=self.strokecolor).pack(side=tk.LEFT)ttk.Button(strokecolor,text="...",width=2,command=lambda:self.strokecolor.set(askcolor(master=self)[1] or self.strokecolor.get())).pack(side=tk.LEFT)strokecolor.pack(fill=tk.X,pady=2)pensize=tk.Frame(self)tk.Label(pensize,text="画笔粗细(像素): ").pack(side=tk.LEFT)self.pensize=ttk.Spinbox(pensize,from_=1,to=1000,width=16)self.pensize.set(self.master_.data.get("pensize",1))self.pensize.pack(side=tk.LEFT)pensize.pack(fill=tk.X,pady=2)self.setdefault=tk.IntVar(self)ttk.Checkbutton(self,text="设为默认值",variable=self.setdefault).pack(side=tk.LEFT,pady=2)buttons=tk.Frame(self)ttk.Button(buttons,text="确定",width=6,command=self.confirm).pack(side=tk.LEFT,padx=12)ttk.Button(buttons,text="取消",width=6,command=self.destroy).pack(side=tk.LEFT,padx=12)buttons.pack(side=tk.RIGHT,pady=2)def confirm(self,event=None):newproperty={}newproperty["width"]=int(self.width.get())newproperty["height"]=int(self.height.get())newproperty["backcolor"]=self.backcolor.get()newproperty["strokecolor"]=self.strokecolor.get()newproperty["pensize"]=int(self.pensize.get())self.master_.data.update(newproperty)self.master_.draw()self.master_.file_changed=Trueif self.setdefault.get():self.master_.config.update(newproperty)self.master_.config.save()self.destroy()class Painter():instances=[]TITLE="画板 v"+_verCONFIGFILE=os.getenv("userprofile")+"\.painter\config.cfg"#CONFIG:包含默认的工具栏位置,背景颜色,画笔颜色,画笔粗细CONFIG={"backcolor":"white","strokecolor":"black","pensize":1}FILETYPE=("vec矢量图文件 (*.vec)","*.vec")_FILETYPES=(FILETYPE,("pickle文件 (*.pkl;*.pickle)","*.pkl;*.pickle"),("所有文件","*.*"))_SAVE_FILETYPES=(("vec矢量图文件 (*.vec)","*.vec"),("bmp图像 (*.bmp)","*.bmp"),("jpeg图像( *.jpg)","*.jpg"),("gif图像 (*.gif)","*.gif"),("png图像 (*.png)","*.png"))+_FILETYPES[1:]def __init__(self,master=None,filename=""):if master==None:self.master=tk.Tk()self.master.title(self.TITLE)else:self.master=masterself.master.withdraw() # 暂时隐藏窗口,避免创建控件时窗口闪烁self.master.focus_force()_load_icon(self.master,filename="paint.ico")self.master.bind("<Key>",self.onkey)self.master.protocol("WM_DELETE_WINDOW",self.ask_for_save)self.file_changed=Falseself.propertywindow=Noneself.filename=filenamePainter.instances.append(self)self.load_config()self.create_toolbar()self.create_canvas()self.create_menu()self.master.wm_deiconify() # wm_deiconfy恢复被隐藏的窗口if self.filename:self.openfile(self.filename)else:# self.data 存放数据self.data=DictFile()self.setdefault()self.draw()def load_config(self):#创建一个配置文件try:self.config=DictFile(self.CONFIGFILE)except:#配置文件不存在时try:try:os.mkdir(os.getenv("userprofile")+"\.painter")except FileExistsError:passopen(self.CONFIGFILE,'w')except OSError:self.config=DictFile.fromdict(self.CONFIG)else:self.config=DictFile(self.CONFIGFILE)self.config.update(self.CONFIG)def create_canvas(self):#创建画布self.cv=ScrolledCanvas(self.master,bg="white",cursor="pencil",relief=tk.GROOVE)try:self.cv["cursor"]="@pencil.cur"except tk.TclError:self.cv["cursor"]="pencil"self.cv.pack(side=tk.BOTTOM,expand=True,fill=tk.BOTH)self.cv.bind("<Button-1>",self.mousedown)self.cv.bind("<B1-Motion>",self.paint)self.cv.bind("<B1-ButtonRelease>",self.mouseup)self.cv.bind("<Button-3>",lambda event:self.editmenu.post(event.x_root,event.y_root))def create_menu(self):#创建菜单menu=tk.Menu(self.master)filemenu=tk.Menu(self.master,tearoff=False)filemenu.add_command(label="新建",command=self.new,accelerator="Ctrl+N")filemenu.add_command(label="打开",command=self.ask_for_open,accelerator="Ctrl+O")filemenu.add_command(label="保存",command=self.save,accelerator="Ctrl+S")filemenu.add_command(label="另存为",command=self.save_as)filemenu.add_separator()filemenu.add_command(label="退出",command=self.ask_for_save)self.editmenu=tk.Menu(self.cv,tearoff=False)self.editmenu.add_command(label="撤销",state=tk.DISABLED,command=self.undo)self.editmenu.add_command(label="清除",command=self.clear)self.editmenu.add_separator()self.editmenu.add_command(label="文档属性",command=self.show_property_window)helpmenu=tk.Menu(self.master,tearoff=False)helpmenu.add_command(label="关于",command=self.about)menu.add_cascade(label="文件",menu=filemenu)menu.add_cascade(label="编辑",menu=self.editmenu)menu.add_cascade(label="帮助",menu=helpmenu)# 显示菜单self.master.config(menu=menu)def create_toolbar(self):#创建工具栏self.toolbar=tk.Frame(self.master,bg="gray92")self.toolbar.pack(side=self.config.get("toolbar",tk.BOTTOM),fill=tk.X)self.create_toolbutton(self.toolbar)def create_toolbutton(self,master):#创建工具栏按钮self.newbtn=ttk.Button(master,width=4,text="新建",command=self.new)self.newbtn.pack(side=tk.LEFT)self.openbtn=ttk.Button(master,width=4,text="打开",command=self.ask_for_open)self.openbtn.pack(side=tk.LEFT)self.savebtn=ttk.Button(master,width=4,text="保存",command=self.save)self.savebtn.pack(side=tk.LEFT)self.cleanbtn=ttk.Button(master,width=4,text="清除",command=self.clear)self.cleanbtn.pack(side=tk.LEFT)self.propertybtn=ttk.Button(master,width=8,text="文档属性",command=self.show_property_window)self.propertybtn.pack(side=tk.RIGHT)
# ------------------------Painter最核心的方法------------------------def mousedown(self,event):data=self.data["data"]data.append([])#开始新的一根线#将新绘制的点坐标附加在最近绘制的线末尾data[-1].append((event.x,event.y))def paint(self,event):data=self.data["data"]try:x=data[-1][-1][0];y=data[-1][-1][1]#在画布上创建新的线条self.cv.create_line(x,y,event.x,event.y,joinstyle=tk.ROUND,width=self.data["pensize"],capstyle=tk.ROUND,fill=self.data["strokecolor"])data[-1].append((event.x,event.y))self.file_changed=Trueself.editmenu.entryconfig(0,state=tk.NORMAL)except IndexError:passdef mouseup(self,event):try:if len(self.data["data"][-1])<=1:del self.data["data"][-1]except IndexError:passdef _clearcanvas(self):#清除画布self.cv.delete("all")def draw(self,data=None):#根据self.data的内容绘制图形if not data:data=self.dataself._clearcanvas()self.config_canvas(data)for line in data["data"]:args=[]for dot in line:args.extend([dot[0],dot[1]])self.cv.create_line(*args,joinstyle=tk.ROUND,width=self.data["pensize"],capstyle=tk.ROUND,fill=self.data["strokecolor"])def config_canvas(self,data=None):# 配置画布if not data:data=self.dataif "width" in data and "height" in data:self.cv.configure(width=self.data["width"],height=self.data["height"],scrollregion=(0,0,self.data["width"],self.data["height"]))if "backcolor" in self.data:self.cv.config(bg=self.data["backcolor"])def undo(self):if self.data["data"]:#如果还能撤销self._clearcanvas()self.data["data"].pop()self.draw()self.file_changed=Trueelse:self.master.bell()self.editmenu.entryconfig(0,state=(tk.NORMAL if self.data["data"] else tk.DISABLED))def clear(self):if not self.data["data"]:returnif msgbox.askyesno("提示","是否清除?",parent=self.master):self._clearcanvas()self.data["data"]=[]self.file_changed=Trueself.editmenu.entryconfig(0,state=tk.DISABLED)
# ------------------------------------------------------------------------def onkey(self,event):if event.state in (4,6,12,14,36,38,44,46): # 适应多种按键情况(Num,Caps,Scroll)if event.keysym=='z':#如果按下Ctrl+Z键self.undo()elif event.keysym=='o':#按下Ctrl+O键self.ask_for_open()elif event.keysym=='s':#Ctrl+Sself.save()elif event.keysym=='n': #Ctrl+Nself.new()def setdefault(self):# 将self.data,self.config设为默认,或填补其中不存在的键self.data.setdefault("ver",_ver)self.data.setdefault("data",[])conffile=self.config.filenameconfig=deepcopy(self.CONFIG)config.update(self.config)self.config=DictFile.fromdict(config,filename=conffile)data=deepcopy(self.config)data.update(self.data)self.data=DictFile.fromdict(data,filename=self.filename)@classmethoddef new(cls):# 新建一个文件(打开另一个画板窗口)cls()def ask_for_open(self):returnval=self.ask_for_save(quit=False)if returnval==0:return#弹出打开对话框filename=dialog.askopenfilename(master=self.master,filetypes=self._FILETYPES)if os.path.isfile(filename):self.filename=filenameself._clearcanvas()self.openfile(filename)def openfile(self,filename):try:self.filename=filenameif filename.endswith(".pkl") or filename.endswith(".pickle"):with open(filename,'rb') as f:obj=pickle.load(f)if type(obj) is dict:self.data=DictFile.fromdict(obj)elif type(obj) in (list,tuple):if type(obj) is tuple:obj=list(obj)self.data={"data":obj}else:onerror(TypeError("未知数据类型: %r"%type(obj)),parent=self.master);returnelse:self.data=DictFile(filename,error_callback=onerror)self.setdefault()self.draw()self.master.title("%s - %s" %(self.TITLE,self.filename))self.editmenu.entryconfig(0, # 撤销state=(tk.NORMAL if self.data["data"] else tk.DISABLED))except Exception as err:onerror(err,msg="无法加载图像: "+str(err),parent=self.master)def ask_for_save(self,quit=True):if self.file_changed:retval=msgbox.askyesnocancel("文件尚未保存","是否保存{}的更改?".format(os.path.split(self.filename)[1] or "当前文件"),parent=self.master)if not retval is None:if retval==True:if self.save()==0:return 0  #0:cancelelse:return 0if quit:self.quit()def save(self,filename=None):if not filename:if not self.filename:filename=dialog.asksaveasfilename(master=self.master,filetypes=self._SAVE_FILETYPES,defaultextension='.vec')if not filename:return 0self.filename=filenametry: # 设置边框宽度bd=int(self.cv["bd"]) or 2# 文档大小为画布的大小self.data["width"]=int(self.cv.winfo_width())-bd*2self.data["height"]=int(self.cv.winfo_height())-bd*2except tk.TclError:passtry:if filename.endswith(".pkl") or filename.endswith(".pickle"):with open(filename,'wb') as f:pickle.dump(dict(self.data),f)elif filename.endswith((".bmp",".png",".jpg",".gif")):# 保存为图像if ImageGrab==None:msgbox.showinfo("无法保存为图像","请使用pip安装PIL库",parent=self.master)bd=int(self.cv["bd"]) or 2 # 去除图像边框x1=self.cv.winfo_rootx()+bdy1=self.cv.winfo_rooty()+bdx2=x1+self.cv.winfo_width()-bd*2y2=y1+self.cv.winfo_height()-bd*2pic = ImageGrab.grab(bbox=(x1,y1,x2,y2))pic.save(filename)else:self.data.save(filename,error_callback=onerror)self.file_changed=Falseself.master.title("%s - %s" %(self.TITLE,self.filename))except Exception as err:onerror(err,msg="抱歉, 无法保存文件: ",parent=self.master)def save_as(self):filename=dialog.asksaveasfilename(master=self.master,filetypes=self._SAVE_FILETYPES,defaultextension='.vec')if filename:self.save(filename)self.filename=filenamedef show_property_window(self):if self.propertywindow is not None:self.propertywindow.focus_force()else:self.propertywindow=PropertyWindow(self)def quit(self):Painter.instances.remove(self)self.config.save()self.master.destroy()def about(self):msgbox.showinfo("tkinter Canvas 设计功能齐全的画板程序\n版本",_ver,parent=self.master)def main():try:os.chdir(os.path.split(__file__)[0])except OSError:passif len(sys.argv)>1:for arg in sys.argv[1:]:root=tk.Tk()root.title(Painter.TITLE)window=Painter(root,filename=arg)else: Painter()tk.mainloop()if __name__=="__main__":main()

第三款:浔川AI五子棋v1.4

正式代码:

# -*- coding: utf-8 -*-
import tkinter as tk
import tkinter.messagebox
import pickle
import random# 窗口
window = tk.Tk()
window.title('AI五子棋登录界面')
window.geometry('450x200')
# 画布放置图片
# canvas=tk.Canvas(window,height=300,width=500)
# imagefile=tk.PhotoImage(file='qm.png')
# image=canvas.create_image(0,0,anchor='nw',image=imagefile)
# canvas.pack(side='top')
# 标签 用户名密码
Verification_Code = random.randint(1000, 9999)#设置一个随机的四位数
Verification_Code = str(Verification_Code)#把类型转换为str型
print(type(Verification_Code))
tk.Label(window, text='用户名:').place(x=100, y=30)
tk.Label(window, text='密码:').place(x=100, y=70)
tk.Label(window, text='验证码').place(x=100, y=110)
tk.Label(window, text=Verification_Code).place(x=320, y=110)
# 用户名输入框
var_usr_name = tk.StringVar()
entry_usr_name = tk.Entry(window, textvariable=var_usr_name)
entry_usr_name.place(x=160, y=30)
# 密码输入框
var_usr_pwd = tk.StringVar()
entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*')
entry_usr_pwd.place(x=160, y=70)
#验证码输入框
var_usr_yzm = tk.StringVar()
entry_usr_yzm = tk.Entry(window, textvariable=var_usr_yzm)
entry_usr_yzm.place(x=160, y=110)# 登录函数
def usr_log_in():# 输入框获取用户名密码usr_name = var_usr_name.get()usr_pwd = var_usr_pwd.get()usr_yzm = var_usr_yzm.get()#测试类型print(type(usr_yzm),type(Verification_Code))# 从本地字典获取用户信息,如果没有则新建本地数据库try:with open('usr_info.pickle', 'rb') as usr_file:usrs_info = pickle.load(usr_file)except FileNotFoundError:with open('usr_info.pickle', 'wb') as usr_file:usrs_info = {'admin': 'admin'}pickle.dump(usrs_info, usr_file)# 判断验证码是否正确用户名和密码是否匹配if usr_yzm == Verification_Code:if usr_name in usrs_info:if usr_pwd == usrs_info[usr_name]:tk.messagebox.showinfo(title='welcome',message='欢迎您:' + usr_name)else:tk.messagebox.showerror(message='密码错误')# 用户名密码不能为空elif usr_name == '' or usr_pwd == '':tk.messagebox.showerror(message='用户名或密码为空')# 不在数据库中弹出是否注册的框else:is_signup = tk.messagebox.askyesno('欢迎', '您还没有注册,是否现在注册')if is_signup:usr_sign_up()elif usr_yzm == '':tk.messagebox.showerror(message='验证码不能为空')else:tk.messagebox.showerror(message='验证码有误!')# 注册函数
def usr_sign_up():# 确认注册时的相应函数def signtowcg():# 获取输入框内的内容nn = new_name.get()np = new_pwd.get()npf = new_pwd_confirm.get()# 本地加载已有用户信息,如果没有则已有用户信息为空try:with open('usr_info.pickle', 'rb') as usr_file:exist_usr_info = pickle.load(usr_file)except FileNotFoundError:exist_usr_info = {}# 检查用户名存在、密码为空、密码前后不一致if nn in exist_usr_info:tk.messagebox.showerror('错误', '用户名已存在')elif np == '' or nn == '':tk.messagebox.showerror('错误', '用户名或密码为空')elif np != npf:tk.messagebox.showerror('错误', '密码前后不一致')# 注册信息没有问题则将用户名密码写入数据库else:exist_usr_info[nn] = npwith open('usr_info.pickle', 'wb') as usr_file:pickle.dump(exist_usr_info, usr_file)tk.messagebox.showinfo('欢迎', '注册成功')# 注册成功关闭注册框window_sign_up.destroy()# 新建注册界面window_sign_up = tk.Toplevel(window)window_sign_up.geometry('350x200')window_sign_up.title('注册')# 用户名变量及标签、输入框new_name = tk.StringVar()tk.Label(window_sign_up, text='用户名:').place(x=10, y=10)tk.Entry(window_sign_up, textvariable=new_name).place(x=150, y=10)# 密码变量及标签、输入框new_pwd = tk.StringVar()tk.Label(window_sign_up, text='请输入密码:').place(x=10, y=50)tk.Entry(window_sign_up, textvariable=new_pwd, show='*').place(x=150, y=50)# 重复密码变量及标签、输入框new_pwd_confirm = tk.StringVar()tk.Label(window_sign_up, text='请再次输入密码:').place(x=10, y=90)tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show='*').place(x=150, y=90)# 确认注册按钮及位置bt_confirm_sign_up = tk.Button(window_sign_up, text='确认注册',command=signtowcg)bt_confirm_sign_up.place(x=150, y=130)# 退出的函数
def usr_sign_quit():window.destroy()# 登录 注册按钮
bt_login = tk.Button(window, text='登录', command=usr_log_in)
bt_login.place(x=140, y=150)
bt_logup = tk.Button(window, text='注册', command=usr_sign_up)
bt_logup.place(x=210, y=150)
bt_logquit = tk.Button(window, text='退出', command=usr_sign_quit)
bt_logquit.place(x=280, y=150)
# 主循环
window.mainloop()
#下载、安装
import tkinter as tk
import time# 创建主窗口
window = tk.Tk()
window.title('进度条')
window.geometry('630x150')# 设置下载进度条
tk.Label(window, text='下载进度:', ).place(x=50, y=60)
canvas = tk.Canvas(window, width=465, height=22, bg="white")
canvas.place(x=110, y=60)# 显示下载进度
def progress():# 填充进度条fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="green")x = 500  # 未知变量,可更改n = 465 / x  # 465是矩形填充满的次数for i in range(x):n = n + 465 / xcanvas.coords(fill_line, (0, 0, n, 60))window.update()time.sleep(0.02)  # 控制进度条流动的速度# 清空进度条fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="white")x = 500  # 未知变量,可更改n = 465 / x  # 465是矩形填充满的次数for t in range(x):n = n + 465 / x# 以矩形的长度作为变量值更新canvas.coords(fill_line, (0, 0, n, 60))window.update()time.sleep(0)  # 时间为0,即飞速清空进度条btn_download = tk.Button(window, text='开始下载', command=progress)
btn_download.place(x=400, y=105)window.mainloop()import tkinter as tk
import time# 创建主窗口
window = tk.Tk()
window.title('进度条')
window.geometry('630x150')# 设置下载进度条
tk.Label(window, text='安装进度:', ).place(x=50, y=60)
canvas = tk.Canvas(window, width=465, height=22, bg="white")
canvas.place(x=110, y=60)# 显示下载进度
def progress():# 填充进度条fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="green")x = 500  # 未知变量,可更改n = 465 / x  # 465是矩形填充满的次数for i in range(x):n = n + 465 / xcanvas.coords(fill_line, (0, 0, n, 60))window.update()time.sleep(0.02)  # 控制进度条流动的速度# 清空进度条fill_line = canvas.create_rectangle(1.5, 1.5, 0, 23, width=0, fill="white")x = 500  # 未知变量,可更改n = 465 / x  # 465是矩形填充满的次数for t in range(x):n = n + 465 / x# 以矩形的长度作为变量值更新canvas.coords(fill_line, (0, 0, n, 60))window.update()time.sleep(0)  # 时间为0,即飞速清空进度条btn_download = tk.Button(window, text='开始安装', command=progress)
btn_download.place(x=400, y=105)window.mainloop()#五子棋
from tkinter import *
import tkinter.messagebox  # 弹窗库
import numpy as nproot = Tk()                                 #创建窗口
root.title("浔川五子棋")                  #窗口名字
w1 = Canvas(root, width=600,height=600,background='chocolate')
w1.pack()for i in range(0, 15):w1.create_line(i * 40 + 20, 20, i * 40 + 20, 580)w1.create_line(20, i * 40 + 20, 580, i * 40 + 20)
w1.create_oval(135, 135, 145, 145,fill='black')
w1.create_oval(135, 455, 145, 465,fill='black')
w1.create_oval(465, 135, 455, 145,fill='black')
w1.create_oval(455, 455, 465, 465,fill='black')
w1.create_oval(295, 295, 305, 305,fill='black')num=0
A=np.full((15,15),0)
B=np.full((15,15),'')
def callback(event):global num ,Afor j in range (0,15):for i in range (0,15):if (event.x - 20 - 40 * i) ** 2 + (event.y - 20 - 40 * j) ** 2 <= 2 * 20 ** 2:breakif (event.x - 20 - 40 * i) ** 2 + (event.y - 20 - 40 * j) ** 2 <= 2*20 ** 2:breakif num % 2 == 0 and A[i][j] != 1:w1.create_oval(40*i+5, 40*j+5, 40*i+35, 40*j+35,fill='black')A[i][j] = 1B[i][j] = 'b'num += 1if num % 2 != 0 and A[i][j] != 1 :w1.create_oval(40*i+5, 40*j+5, 40*i+35, 40*j+35,fill='white')A[i][j] = 1.B[i][j] = 'w'num += 1f = [[-1, 0], [-1, 1], [0, 1], [1, 1]]for z in range(0, 4):a, b = f[z][0], f[z][1]count1, count2 = 0, 0x, y = i, jwhile B[x][y] == B[i][j]:count1 += 1if x + a >= 0 and y + b >= 0 and x + a < 15 and y + b < 15 and B[x + a][y + b] == B[i][j]:[x, y] = np.array([x, y]) + np.array([a, b])else:x, y = i, jbreakwhile B[x][y] == B[i][j]:count2 += 1if x - a < 15 and y - b < 15 and x - a >= 0 and y - b >= 0 and B[x - a][y - b] == B[i][j]:[x, y] = np.array([x, y]) - np.array([a, b])else:breakif count1 + count2 == 6:if B[i][j] == 'b':tkinter.messagebox.showinfo('提示', '黑棋获胜')else:tkinter.messagebox.showinfo('提示', '白棋获胜')w1.bind("<Button -1>",callback)
w1.pack()
def quit():root.quit()u=Button(root,text="退出",width=10,height=1,command=quit,font=('楷体',15))
u.pack()mainloop()

大好消息:浔川AI助手将于2025年5月26日重磅上线!

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

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

相关文章

小程序驾校预约系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学员管理&#xff0c;教练管理&#xff0c;驾校信息管理&#xff0c;驾校车辆管理&#xff0c;教练预约管理&#xff0c;考试信息管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;驾校信息&a…

一个简单的文件下载服务

背景&#xff1a;我需要一个简单的文件下载功能&#xff0c;例如&#xff1a;输入 /Users/Documents//filedownload/src/main/resources/a.txt会下载文件到本地 准备&#xff1a;新建一个简单的 springboot 服务&#xff0c;直接上代码&#xff0c;如有需要 pom.xml 放在最后 …

ROS2创建自定义接口

ROS2提供了四种通信方式&#xff1a; 话题-Topics 服务-Services 动作-Action 参数-Parameters 查看系统自定义接口命令 使用ros2 interface package sensor_msgs命令可以查看某一个接口包下所有的接口 除了参数之外&#xff0c;话题、服务和动作(Action)都支持自定义接口&am…

【智能算法】决策树算法

目录 一、基本概念 二、工作原理 三、决策树算法优点和缺点 3.1 决策树算法优点 3.2 决策树算法缺点 四、常见的决策树算法及matlab代码实现 4.1 ID3 4.1.1 定义 4.1.2 matlab代码实现 4.2 C4.5 4.2.1 定义 4.2.2 matlab代码实现 4.3 CART 4.3.1 定义 4.3.2 mat…

基于深度学习的人体骨架提取

1. 任务和目标 人体骨架提取的主要任务是从图像或视频中检测和重建人体的关键点&#xff08;关节点&#xff09;&#xff0c;以描述和理解人体的姿态和动作。关键点通常表示为连接成骨架结构的主要关节&#xff0c;例如头部、肩膀、肘部等。 2. 技术和方法 2.1 深度学习模型…

【代码随想录训练营】【Day 62】【单调栈-1】| Leetcode 739, 496, 503

【代码随想录训练营】【Day 62】【单调栈-1】| Leetcode 739, 496, 503 需强化知识点 单调栈&#xff1a;要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置 题目 739. 每日温度 单调栈的基本使用&#xff1a;注意要判断 while len(stack) > 0 class S…

android轮播图入门1——简单无限自动轮播图

目标 目标是实现一个简单的轮播图&#xff0c;特征如下&#xff1a; 只展示本地图片可以无限轮播&#xff0c;在第一帧时也可以向前轮播可以自动轮播 code 先上代码&#xff0c;需要事先准备几张本地图片当素材 MainActivity: package com.example.loopapplication;import…

【数据结构】——链表经典OJ(leetcode)

文章目录 一、 相交链表二、 反转链表三、 回文链表四、 环形链表五、 环形链表 II六、 合并两个有序链表七、 两数相加八、 删除链表的倒数第N个节点九、 随机链表的复制 一、 相交链表 双指针法 struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListN…

day02-Spark集群及参数

一、Spark运行环境变量问题(了解) 1-pycharm远程开发运行时&#xff0c;执行的是服务器的代码 2-通过本地传递指令到远程服务器运行代码时&#xff0c;会加载对应环境变量数据&#xff0c;加载环境变量文件是用户目录下的.bashrc文件 在/etc/bashrc 1-1 在代码中添加 使用os模块…

Python 算法交易实验74 QTV200第二步(改): 数据清洗并写入Mongo

说明 之前第二步是打算进入Clickhouse的&#xff0c;实测下来有一些bug 可以看到有一些分钟数据重复了。简单分析原因&#xff1a; 1 起异步任务时&#xff0c;还是会有两个任务重复的问题&#xff0c;这个在同步情况下是不会出现的2 数据库没有upsert模式。clickhouse是最近…

MT1568 学生成绩

题目 有3个学生&#xff0c;每个学生有3门课的成绩&#xff0c;从键盘输入数据&#xff0c;包括学号、姓名、三门课成绩&#xff0c;学号整型&#xff0c;姓名字符型&#xff0c;成绩实型&#xff0c;计算3门课程总平均成绩&#xff0c;以及平均分最高的学生信息。不考虑非法成…

【webrtc】webrtc 与h265

参考 webrtc 支持H265(三) 总结_webrtc h265-CSDN博客 enable-chromium-hevc-hardware-decoding/README.zh_CN.md at main StaZhu/enable-chromium-hevc-hardware-decoding GitHub 《WebRTC系列》实战 Web 端支持 h265 硬解_webrtc-streamer h265编码-CSDN博客 webrtc分块…

mysql GROUP_CONCAT函数详解

文章目录 概要使用技巧1. 建表、插入数据2.以id分组&#xff0c;把age字段的值拼成一行&#xff0c;逗号分隔(默认)3.以id分组&#xff0c;把age字段的值拼成 一行&#xff0c;分号分隔4.以id分组&#xff0c;把去冗余的age字段的值打印在一行5.以id分组&#xff0c;把age字段的…

算法:链表题目练习

目录 链表的技巧和操作总结 常用技巧&#xff1a; 链表中的常用操作 题目一&#xff1a;反转一个单链表 题目二&#xff1a;链表的中间结点 题目三&#xff1a;返回倒数第k个结点 题目四&#xff1a;合并两个有序链表 题目五&#xff1a;移除链表元素 题目六&#xff…

利用LLM本身训练SoTA embedding模型

今天分享一篇Microsoft公司的一篇文章&#xff0c;Title: Improving Text Embeddings with Large Language Models&#xff1a;使用大语言模型改善文本嵌入。 这篇文章探索了直接利用LLM来做embedding模型&#xff0c;其只需要利用合成数据和少于1000次的训练步骤就能获得高质…

语言模型:文本表征词嵌入技术调研

1 文本表征 文本表征是自然语言处理中的关键部分&#xff0c;尤其在当前大模型快速发展的背景下。由于大模型存在知识有限、处理文本长度有限、保密要求和大模型幻觉等问题&#xff0c;结合外部数据显得尤为重要。 为了便于存储和检索&#xff0c;除了保存纯文本外&#xff0…

Debug 调试代码

我们使用 debug 的目的, 认为就是查看代码的执行过程的。 步骤&#xff1a; 1. 打断点 断点的意义是, debug 运⾏的时候, 代码会在断点处停下来不执行如果是想要查看代码的执行过程, 建议将断点放在第⼀行在代码 和 行号之间 点击,出现的红色圆点 就是断点, 再次点击可以取消 …

Webpack: 构建微前端应用

Module Federation 通常译作“模块联邦”&#xff0c;是 Webpack 5 新引入的一种远程模块动态加载、运行技术。MF 允许我们将原本单个巨大应用按我们理想的方式拆分成多个体积更小、职责更内聚的小应用形式&#xff0c;理想情况下各个应用能够实现独立部署、独立开发(不同应用甚…

高项-信息系统工程知识要点

1、五大软件架构风格 数据流风格&#xff1a;批处理序列、管道/过滤器 ◆调用/返回风格&#xff1a;主程序X 子程序、数据抽象、面向对象、层次结构 ◆独立构件风格&#xff1a;进程通信、事件驱动 虚拟机风格&#xff1a;解释器、基于规则的系统 仓库风格&#xff1a;数据库系…

apipost的安装和测试添加接口能否正常使用

1.进入官网&#xff0c;点击免费使用&#xff08;我是windows 64位&#xff0c;选合适自己的配置&#xff09; 2.开始安装 选仅为我安装——下一步 选择自己的安装目录——点安装 等待 运行——完成 3.apipost一些基本操作——实现添加内容 &#xff08;1&#xff09;新建接口…