• 技术文章 >Python技术 >Python高级

    Python如何使用tkinter编写GUI程序

    爱喝马黛茶的安东尼爱喝马黛茶的安东尼2019-07-03 15:27:18原创3135
    @(Python3中tkinter写的HTTP测试工具代码支持正则表达式和XPATH)

    程序非常简单,暂时只支持GET方法,使用内置库tkinter编写GUI窗口,在Mac下运行效果图如下,windows运行需要更改控件宽度高度等控制参数才能很好的显示。

    效果图(使用XPATH匹配房天下网站)

    1562138451664485.png1562138459841062.png

    代码如下,需要安装requests和lxml第三方库

    相关推荐:《Python视频教程

    app.py.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    101

    102

    103

    104

    105

    106

    107

    108

    109

    110

    111

    112

    113

    114

    115

    116

    117

    118

    119

    120

    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()

    专题推荐:python tkinter gui
    上一篇:python如何将数据渲染到docx文档指定位置 下一篇:如何利用Python进行垃圾分类

    相关文章推荐

    • Python多继承C3算法解析• python如何将数据渲染到docx文档指定位置

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网