基于flask与tk的网络粘贴板
来源:互联网 发布:matlab编程第二版购买 编辑:程序博客网 时间:2024/06/07 23:05
基于flask与tk的网络粘贴板
由于本人一直用 linux 所以平时和我的队友们交流代码 十分的不方便 没有办法 我就自己写一个功能简单但是特别适合我自己用的一个网络粘贴板
只有两个按钮 下载 和 上传 。
我的这个应用分成两个部分 一个是服务端 和一个 客户端 服务端接收到客户端发送的请求以后会保存你上传的代码如果有其他人请求下载代码的话会
返回这个代码
我们知道C++代码里面有很多的#{};?等标点符号有些符号在URL里面会有一些转义的问题为了保证我们上传和下载的代码相同 所以我用到了base64进
行加密,普通的base64加密会出现URL不安全的符号,所以我选择了python3 base64 里有一个叫做urlsafe的一个加密和解密的方法保证我们的数
据的正确性
服务端 我用的是 flask 搭建的一个简单的 API 来完成我们服务端的一些收发数据
由于我的 flask 在 Apache 上面运行失败了 队友又催着写代码没办发 我就简单的让啊我的服务端程序在后台运行在DEBUG模式
以后我再写什么 flask 的问题再解决咯。
客户端我用的是TK PS:(因为这个安装的快而且队友windows电脑上面只要装一个python就可以了) PSS:(我在由于我没有Windows电脑所以没有去折腾如何生成EXE文件,这样就不用安装Python环境了)
由于的对TK学习的不是太多所以呢,我就找了一个别人写的DOME我简单的修改了一下就可以用了(尴尬)
服务器端代码
from flask import Flaskfrom flask import requestapp = Flask(__name__)code=''@app.route('/')def hello_world(): return code@app.route("/hello")def haha(): return "这是一个测s "@app.route('/postcode', methods=['POST', 'GET'])def postcode(): global code if request.method == "GET": code = request.args.get('code', '') return '200' elif request.method == 'POST': code = request.dataif __name__ == '__main__': app.debug = True app.run(host='0.0.0.0')
桌面端的代码
import tkinterimport requestsimport base64class MainFrame(tkinter.Frame): def __init__(self, master=None): tkinter.Frame.__init__(self, master) self.grid(row=0, column=0, sticky="nsew") self.createFrame() def createFrame(self): label_frame_top = tkinter.LabelFrame(self) label_frame_center = tkinter.LabelFrame(self) label_frame_center.pack(fill="x") lfc_field_1 = tkinter.LabelFrame(label_frame_center) lfc_field_1.pack(fill="x") self.lfc_field_1_l = tkinter.Button(lfc_field_1, text="下载更新最新代码", width=10,command=self.downloder) self.lfc_field_1_l.pack(fill="y", expand=0, side=tkinter.LEFT) self.lfc_field_1_b = tkinter.Button(lfc_field_1, text="上传我的代码", width=10, height=1, command=self.uploder) self.lfc_field_1_b.pack(fill="y", expand=0, side=tkinter.RIGHT) ##########文本框与滚动条 self.lfc_field_1_t_sv = tkinter.Scrollbar(lfc_field_1, orient=tkinter.VERTICAL) #文本框-竖向滚动条 self.lfc_field_1_t_sh = tkinter.Scrollbar(lfc_field_1, orient=tkinter.HORIZONTAL) #文本框-横向滚动条 self.lfc_field_1_t = tkinter.Text(lfc_field_1, height=25, yscrollcommand=self.lfc_field_1_t_sv.set, xscrollcommand=self.lfc_field_1_t_sh.set, wrap='none') #设置滚动条-不换行 #滚动事件 self.lfc_field_1_t_sv.config(command=self.lfc_field_1_t.yview) self.lfc_field_1_t_sh.config(command=self.lfc_field_1_t.xview) #布局 self.lfc_field_1_t_sv.pack(fill="y", expand=0, side=tkinter.RIGHT, anchor=tkinter.N) self.lfc_field_1_t_sh.pack(fill="x", expand=0, side=tkinter.BOTTOM, anchor=tkinter.N) self.lfc_field_1_t.pack(fill="x", expand=0, side=tkinter.LEFT) #绑定事件 self.lfc_field_1_t.bind("<Control-Key-a>", self.selectText) self.lfc_field_1_t.bind("<Control-Key-A>", self.selectText) ##########文本框与滚动条end label_frame_bottom = tkinter.LabelFrame(self) #label_frame_bottom.pack() pass #文本全选 def selectText(self, event): self.lfc_field_1_t.tag_add(tkinter.SEL, "1.0", tkinter.END) #self.lfc_field_1_t.mark_set(tkinter.INSERT, "1.0") #self.lfc_field_1_t.see(tkinter.INSERT) return 'break' #为什么要return 'break' def uploder(self): str1=self.lfc_field_1_t.get('0.0','end') str1=str1.encode(encoding="utf-8") str1= base64.urlsafe_b64encode(str1) # 加密 print(str(str1)) str1 = "http://copie.cn:5000/postcode?code="+str(str1) # print(str1) req = requests.get(str1) print("上传了") # print(str1) # print(req) def downloder(self): req = requests.get("http://copie.cn:5000/") print("下载成功") print(req.text) str1 = req.text[2:-1].encode(encoding="utf-8") print(str1) str1 = base64.urlsafe_b64decode(str1) # 解密 print(str1.decode()) self.lfc_field_1_t.delete('0.0', 'end') self.lfc_field_1_t.insert('0.0', str1.decode())def main(): root = tkinter.Tk() root.columnconfigure(0, weight=1) root.rowconfigure(0, weight=1) root.geometry('640x360') #设置了主窗口的初始大小960x540 800x450 640x360 main_frame = MainFrame(root) main_frame.mainloop()if __name__ == "__main__": main() pass
版权属于:copie
本文链接:
http://copie.cn/index.php/archives/%E5%9F%BA%E4%BA%8Eflask%E4%B8%8Etk%E7%9A%84%E7%BD%91%E7%BB%9C%E7%B2%98%E8%B4%B4%E6%9D%BF.html
转载时须注明出处及本声明
- 基于flask与tk的网络粘贴板
- 基于tcl tk 的HyperView二次开发
- 基于tcl tk 的HyperGraph二次开发
- TCL/TK 与 C 程序的集成
- TCL/TK 与 C 程序的集成
- TCL/TK 与 C 程序的集成
- TCL/TK 与 C 程序的集成
- vim与系统粘贴板复制、粘贴
- 基于Tcl/Tk语言的自动化测试平台的实现
- flask的request_context原理 基于flask v0.1
- 基于tcl tk 的HyperView二次开发实例【2】
- 基于tcl tk 的HyperView二次开发实例【3】
- 基于Tcl/Tk的HyperView后处理二次开发实例
- 基于Python的flask的开发实战
- gae 部署基于flask的web服务器
- 基于Flask的博客系统搭建
- 基于Flask session机制的单点登录
- 基于flask的超分辨率展示
- python学习(三)----集合类型内建方法总结
- c# 后台给控件加样式
- 安装SQL Server2008后 ,wamp无法启动apache
- hdu 6055 Regular polygon
- Spring的BeanDefinition和InstantionStratety和BeanWapper
- 基于flask与tk的网络粘贴板
- Unity Attribute
- Vue.js使用pdfMake时出现字体找不到错误
- amcharts 折线图
- 文本框限制输入数字或者字母等。
- python下stl格式转换off格式
- android studio断点调试
- python学习(四)----文件相关方法
- ADF taskflow用法