Python3使用tkinter编写GUI程序
@
程序非常简单,暂时只支持GET方法,使用内置库tkinter编写GUI窗口,在Mac下运行效果图如下,windows运行需要更改控件宽度高度等控制参数才能很好的显示。
效果图(使用XPATH匹配房天下网站)
代码如下,需要安装requests和lxml第三方库
app.py
.
import tkinter as tk
from tkinter import scrolledtext
from tkinter import messagebox
import re
import requests
from lxml import etree
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
#bar
self.canvas = tk.Canvas(self,width=980,height=65,bg='#ebf4ec')
self.image_file = tk.PhotoImage(file='network.png')
self.imag = self.canvas.create_image(50,0,anchor='n',image=self.image_file)
self.canvas.create_text(480,35,text='HTTP测试工具',font=('Arial',35),)
self.canvas.grid(row=0,columnspan=3)
#method HTTP方法多选框
self.var_method = tk.StringVar(self)
self.var_method.set('GET')
self.optionmenu = tk.OptionMenu(self,self.var_method,'GET','POST','PUT','PATCH','DELETE','HEAD','OPTIONS').grid(row=1,column=0,padx=2,pady=2,ipadx=10,ipady=5)
#url
self.var_url = tk.StringVar(self)
self.var_url.set('http://')
self.url_entry = tk.Entry(self,font=('Arial',14),width=82,textvariable=self.var_url).grid(row=1,column=1,padx=1,pady=2,ipadx=10,ipady=5)
#request button
self.request_button = tk.Button(self, text='发送请求', fg='#436EEE', command=self.request).grid(row=1,column=2,padx=2,pady=2,ipadx=10,ipady=5)
#request header
self.header_label = tk.Label(self,text='请求头:').grid(row=3,column=0,padx=2,pady=2,ipadx=10,ipady=5)
self.var_header = tk.StringVar(self)
self.var_header.set('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:64.0) Gecko/20100101 Firefox/64.0')
self.header_entry = tk.Entry(self,font=('Arial',14),width=82,textvariable=self.var_header).grid(row=3,column=1,padx=2,pady=2,ipadx=10,ipady=5)
#regular expression
self.re_header = tk.Label(self,text='正则表达式:').grid(row=4,column=0,padx=2,pady=2,ipadx=10,ipady=5)
self.var_re = tk.StringVar(self)
self.re_entry = tk.Entry(self,font=('Arial',14),width=82,textvariable=self.var_re).grid(row=4,column=1,padx=2,pady=2,ipadx=10,ipady=5)
self.re_button = tk.Button(self, text='匹配全部',command=self.re_request).grid(row=4,column=2,padx=2,pady=2,ipadx=10,ipady=5)
#xpath
self.xpath_label = tk.Label(self,text='Xpath表达式:').grid(row=5,column=0,padx=2,pady=2,ipadx=10,ipady=5)
self.var_xpath = tk.StringVar(self)
self.xpath_entry = tk.Entry(self,font=('Arial',14),width=82,textvariable=self.var_xpath).grid(row=5,column=1,padx=2,pady=2,ipadx=10,ipady=5)
self.xpath_button = tk.Button(self, text='匹配全部',command=self.xpath_request).grid(row=5,column=2,padx=2,pady=2,ipadx=10,ipady=5)
#information
self.var_status = tk.StringVar()
self.var_status.set('当前状态:未请求')
self.information = tk.Label(self,textvariable=self.var_status,bg='#48D1CC',font=('Arial',14)).grid(row=6, column=1, padx=2, pady=2, ipadx=10, ipady=5)
#results
self.textarea = tk.scrolledtext.ScrolledText(self,width=117,height=25,bg='black',fg='#00EE00',font=('Arial',14))
self.textarea.grid(row=7,columnspan=3,pady=10)
#xpath匹配
def xpath_request(self):
xpath = self.var_xpath.get()
if xpath == '':
messagebox.showinfo('警告', message='请输入XPATH表达式!')
else:
url = self.var_url.get()
header = self.var_header.get()
headers = {'User-Agent':header}
data = requests.get(url=url,headers=headers).text
results = etree.HTML(data).xpath(xpath)
self.textarea.delete('1.0', 'end')
for i in results:
self.textarea.insert('end',i.text + '\n')
#正则表达式匹配
def re_request(self):
exp = self.var_re.get()
if exp == '':
messagebox.showinfo('警告',message='请输入正则表达式!')
else:
url = self.var_url.get()
header = self.var_header.get()
headers = {'User-Agent':header}
data = requests.get(url=url,headers=headers).text
results = re.compile(exp).findall(data)
self.textarea.delete('1.0', 'end')
self.textarea.insert('end',results)
def request(self):
method = self.var_method.get()
if method == 'GET':
self.get_request()
elif method == 'POST':
self.post_request()
def post_request(self):
pass
#还没写
#发送HTTP GET请求
def get_request(self):
self.textarea.delete('1.0','end')
if self.var_header.get() == '':
headers = {'User-Agent':''}
else:
headers = {'User-Agent':self.var_header.get()}
url = self.var_url.get()
data = requests.get(url=url,headers=headers)
if (data.status_code == 200):
self.var_status.set('当前状态:'+ 'GET ' + url + ' '+ str(data.status_code)+' OK')
elif (data.status_code == 404):
self.var_status.set('当前状态:' + str(data.status_code) + ' Not found')
else:
self.var_status.set('当前状态:' + str(data.status_code))
content = data.text
self.textarea.insert('end',content)
if __name__ == '__main__':
root = tk.Tk()
root.title('KK HTTP测试工具')
root.geometry('980x700')
app = Application(master=root)
app.mainloop()
Python3使用tkinter编写GUI程序的更多相关文章
- 教程和工具--用wxPython编写GUI程序的
wxPython是个很好的GUI库,对底层的C++库进行了封装,调用起来很方便,尤其是操作前台UI界面和后台多线程,两者配合很方便,做GUI程序最难是写界面尤其是布局. 关于wxPython,自己正在 ...
- Python3.6使用Pyqt5编写GUI程序
Python3.6使用Pyqt5编写HTTP测试工具 程序非常简单,使用PYQT5搭建好UI,然后用PyUIC生成Python文件,Mac中使用Pycharm+Python3.6+Pyqt5搭建教程在 ...
- python3 修改计算机名称GUI程序
from tkinter import *from tkinter import messageboximport tkinterimport winregimport osdef serch(): ...
- Python使用wxPython、py2exe编写桌面程序-乾颐堂
Python是支持可视化编程,即编写gui程序,你可以用它来编写自己喜欢的桌面程序.使用wxPython来做界面非常的简单,只是不能像C#一样拖动控件,需要自行写代码布局.在完成编写之后,由于直接的p ...
- Windows下用python编写简单GUI程序的方法
Python实现GUI简单的来说可以调用Tkinter库,这样一般的需求都可以实现,显示简单的windows窗口代码如下: python_gui.py #!C:\Python27\python.exe ...
- python3 井字棋 GUI - 人机对战、机器对战 (threading、tkinter库)
python3 井字棋 GUI - 人机对战.机器对战 功能 GUI界面 人机对战(可选择机器先走) 机器对战(50局) 流程图 内核 棋盘 [0][1][2] [3][4][5] [6][7][8] ...
- 第一个真正的 GUI 程序——Tkinter教程系列02
第一个真正的 GUI 程序--Tkinter教程系列02 前言 欢迎光临我的个人博客 chens.life Tk 系列教程: Tkinter教程系列01--引言和安装Tk 我们将编写一个英尺和米的转换 ...
- 使用PyQt来编写第一个Python GUI程序
原文:使用PyQt来编写第一个Python GUI程序 本文由 伯乐在线 - Lane 翻译,Daetalus 校稿.未经许可,禁止转载!英文出处:pythonforengineers.com.欢迎加 ...
- Qt5+MSVC2015环境将VS2015编写的控制台程序转化为GUI程序
如题所述,如何将VS2015编写的控制台程序转化为Qt5+MSVC2015环境编译的GUI程序? 最近想到这个操作,类似于Linux下使用的命令行操作转到Windows下使用GUI操作,看了控制台的命 ...
随机推荐
- 杭电acm习题分类
专注于C语言编程 C Programming Practice Problems (Programming Challenges) 杭电ACM题目分类 基础题:1000.1001.1004.1005. ...
- HDU2444(KB10-B 二分图判定+最大匹配)
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- js-JavaScript常见的创建对象的几种方式
1.通过Object构造函数或对象字面量创建单个对象 这些方式有明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码.为了解决这个问题,出现了工厂模式. 2.工厂模式 考虑在ES中无法创建类( ...
- 原生css 中变量的使用
前两天看到阮大神的一篇在css中使用变量的文章,整理了一下. 这个重要的 CSS 新功能,所有主要浏览器已经都支持了.本文全面介绍如何使用它,你会发现原生 CSS 从此变得异常强大. 一.变量的声明 ...
- Vue.js之生命周期
有时候,我们需要在实例创建过程中进行一些初始化的工作,以帮助我们完成项目中更复杂更丰富的需求开发,针对这样的需求,Vue提供给我们一系列的钩子函数. vue生命周期 beforeCreate 在实例初 ...
- 记录搭建Odoo框架
一.获取 Odoo 源码 Odoo 是一个开源项目,我们可以轻松的在 Github 上找到它的源码.本次中使用的是 12.0 版本的 Odoo,所以在拉取代码时选择 12.0 的分支.确保拉取的速度, ...
- MUI - IOS系统,相册选择照片后,点击确定按钮无反应
MUI框架下使用 plus.gallery.pick 时,选择好照片之后,点击确定按钮无反应(既没报错,也没正确执行成功或失败后的回调方法).这是在做测试时,其中有两台苹果机上出现的bug.做了调试也 ...
- 将caj文件转化为pdf文件进行全文下载脚本(ubuntu下亲测有用)
最近ubuntu下caj阅读器,突然崩掉了,而偏偏要准备开题,在网上搜索原因未果,准备放弃时候,突然在网上看到一个脚本,说是很好用,可以在指定页面将caj文件转化为pdf文件,亲测有用,这里直接给出脚 ...
- 安装cuda8.0时无法安装.net Framework 4.0 错误的解决
作者:朱金灿 来源:http://blog.csdn.net/clever101 在win7 64位旗舰版(带sp1)上安装cuda时到安装Microsoft.NET Framework4.0,一直停 ...
- ActiveReports 报表应用教程 (12)---交互式报表之贯穿钻取
在葡萄城ActiveReports报表中提供强大的数据分析能力,您可以通过图表.表格.图片.列表.波形图等控件来实现数据的贯穿钻取,在一级报表中可以通过鼠标点击来钻取更为详细的数据. 本文展示的是20 ...