基于python3的tkinter和scapy可视化报文构造工具(二)

文章开头作为今天2021第一天,还是先祝各位猿友元旦快乐,新的一年大家头发越来越多,bug越来越少。

回到正题,上一篇文章已经给大家简单介绍了pcapbuilder工具所用到的库和要实现的功能。今天就先具体讲讲工具首页的实现。首先看看首页的布局,如下图

首页很简单就两个组件,一个标签和一个按钮。点击按钮要实现的功能是切换到第二界面。实现界面用的是python的tkinter 模块。Python自带了tkinter 模块,是一种面向对象的GUI工具包 TK 的Python编程接口,提供了快速便利地创建GUI应用程序的方法。其图像化编程的基本步骤通常包括:

  1. 导入tkinter模块
  2. 创建GUI根窗体
  3. 添加人机交互控件并编写相应的函数
  4. 在主事件循环中等待用户触发事件响应

运行程序跳出来的窗体就是上述步骤二的根窗体,根窗体是图像化应用程序的根控制器,是tkinter的底层控件的实例。当导入tkinter模块后,调用 Tk()方法可初始化一个根窗体实例 root ,用 title() 方法可设置其标题文字,用geometry()方法可以设置窗体的大小(以像素为单位)。将其置于主循环中,除非用户关闭,否则程序始终处于运行状态。

接下来详细讲一下首页布局中用到的两个控件----标签按钮

标签的作用是显示单行文本。其属性包括尺寸、颜色、字体、相对位置、浮雕样式、图标样式和悬停光标形状等。贴出该部分的代码片段

root= Tk()

class maindesk():
    def __init__(self,):
        root.title('pcapbuilder')
        root.geometry('700x500')

    def placeLbAndButton(self):
        self.lb = Label(root, text='Wlcome To PcapBuilder', \
                   bg='#d3fbfb', \
                   fg='red', \
                   font=('华文新魏', 32), \
                   width=30, \
                   height=2, \
                   relief=FLAT)
        self.lb.place(relx=0.02, rely=0.35)

标签实例lb 在父容器root中实例化,具有代码中所示的text(文本)、bg(背景色)、fg(前景色)、font(字体)、width(宽,默认以字符为单位)、height(高,默认以字符为单位)和 relief(浮雕样式)等一系列属性。在实例化控件时,实例的属性可以“属性=属性值”的形式枚举列出,不区分先后次序。例如:“ text='Welcome to PcapBuilder' ”显示标签的文本内容,“bg='#d3fbfb'”设置背景色为十六进制数RGB色 #d3fbfb等等。属性值通常用文本形式表示。单独讲一下relief属性,该属性决定标签控件显示出来的样式,其总共有五种样式,FLAT(平的)、RAISED(凸起的)、SUNKEN(凹陷的)、GROOVE(沟槽状边缘)和 RIDGE(脊状边缘)。具体大家可以每种样式都试一下看下效果,选择自己喜欢的。其他属性可自行上网查找。

设置好Lable的属性后得给他一个安身之所,放到窗体的具体位置上。这就涉及到控件的布局。控件的布局通常pack()、grid()和place()三种,这里用到的是place()方法。

place()方法:根据控件实例在父容器中的绝对或相对位置参数进行布局。其常用布局参数如下:

  1. x,y:控件实例在根窗体中水平和垂直方向上的其实位置(单位为像素)。注意,根窗体左上角为0,0,水平向右,垂直向下为正方向。
  2. relx,rely:控件实例在根窗体中水平和垂直方向上起始布局的相对位置。即相对于根窗体宽和高的比例位置,取值0.0~1.0之间。
  3. height,width:控件实例本身的高度和宽度(单位为像素)。
  4. relheight,relwidth:控件实例相对于根窗体的高度和宽度比例,取值0.0~1.0之间。
  5. 利用place()方法配合relx,rely和relheight,relwidth参数所得的到的界面可自适应根窗体尺寸的大小。

以上就是标签和控件的布局用法

按钮(Button)主要是为响应鼠标单击事件触发运行程序所设的,故其除控件共有属性外,属性command是最为重要的属性。通常,将按钮要触发执行的程序以函数形式预先定义,然后调用函数来实现点击按钮所要达到的效果。

self.btn = Button(root, text='start',font=('华文新魏', 20),  command=self.main)
self.btn.place(relx=0.35, rely=0.6, relwidth=0.3, relheight=0.1)

command后面就是按钮所要实现的功能,其有两种调用方式

  1. 直接调用函数。参数表达式为“command=函数名”,注意函数名后面不要加括号,也不能传递参数。如本例中使用的command=self.main:
  2. 利用匿名函数调用函数和传递参数。参数的表达式为“command=lambda”:函数名(参数列表)。后面会用到该调用方式。

点击按钮后切换到第二界面,调用的是main函数

    def main(self):
        self.lb.place_forget()
        self.btn.place_forget()
        pcapnotebook.main()

实现界面切换的效果实际上是把首页界面上的标签和按钮隐藏,然后布局第二界面上的控件,来达到切换的效果。注意的是place_forget()将组件从屏幕中“删除”, 并没有销毁该组件,只是看不到了。

至此首页的控件及其布局就这么多,另外tkinter提供了其他丰富的控件,大家感兴趣也可以自行去尝试其他的控件及其用法。下面贴出该部分的代码。

from tkinter import *
from tkinter import ttk
from  http import httpclass
from  https import httpsclass


root= Tk()

class maindesk():
    def __init__(self,):
        root.title('pcapbuilder')
        root.geometry('700x500')

    def placeLbAndButton(self):
        self.lb = Label(root, text='Wlcome To PcapBuilder', \
                   bg='#d3fbfb', \
                   fg='red', \
                   font=('华文新魏', 32), \
                   width=30, \
                   height=2, \
                   relief=FLAT)
        self.lb.place(relx=0.02, rely=0.35)

        self.btn = Button(root, text='start',font=('华文新魏', 20),  command=self.main)
        self.btn.place(relx=0.35, rely=0.6, relwidth=0.3, relheight=0.1)

    def main(self):
        self.lb.place_forget()
        self.btn.place_forget()
        pcapnotebook.main()

class pcapnotebook():

    @classmethod
    def main(cls):
        pass  #欲知故事如何请听下回分解


if __name__ == '__main__':

    maindesk().placeLbAndButton()

    root.mainloop()

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ftzchina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值