本系列原創博文傳送門:
用python做乙個安全攻防工具:埠嗅探器(1)
用python做乙個安全攻防工具:埠嗅探器(2)
用python做乙個安全攻防工具:埠嗅探器(3)
用python做乙個安全攻防工具:埠嗅探器(4)
用python做乙個安全攻防工具:埠嗅探器(5)
用python做乙個安全攻防工具:埠嗅探器(6)
用python做乙個安全攻防工具:埠嗅探器(7)
用python做乙個安全攻防工具:埠嗅探器(8)
用python做乙個安全攻防工具:埠嗅探器(9)
本篇將對ui進行優化,如果還有篇幅,則嘗試引入pyside2的signal、slot機制。
ui優化方向在於優化互動,使得介面更容易讓人理解,並引入qgroupbox、qboxlayout進行布局的管理。
先使用qgroupbox、qboxlayout進行布局上的優化。
首先需要將控制項放入到qboxlayout的布局控制項裡。
在最開始設計的ui原型上,分成了上下兩大塊,下面那塊,又分成了左右兩邊。
其中qvboxlayout是縱向布局,qhboxlayout是橫向布局。
所以先是兩個橫向布局加入到分組框控制項qgroupbox裡,再是下面的左右兩塊縱向布局加入到第二個橫向布局裡。
使用布局的話,應該就不需要繼續使用move來設定位置了,如果有不滿意的,再進行細調。
先按這個思路進行實現,**如下:
# coding=utf-8
from pyside2.qtwidgets import qgroupbox, qvboxlayout, qhboxlayout # 布局容器
import sys
window = qwidget() # 建立主窗體
window.resize(600, 480) # 主窗體尺寸
window.setwindowtitle('埠嗅探器 v1.0') # 窗體名稱
ip_line_edit = qlineedit() # 修改父類
ip_line_edit.setplaceholdertext('輸入ip或者**')
ip_line_edit.setminimumsize(180, 22)
thread_label = qlabel('併發數:')
thread_line_edit = qlineedit() # 修改父類
thread_line_edit.settext('500')
thread_line_edit.setminimumsize(40, 22)
# thread_line_edit.move(260, 10) # 注釋
port_label = qlabel('埠範圍:')
port_line_edit1 = qlineedit() # 修改父類
port_line_edit1.settext('0')
port_label2 = qlabel('~')
port_line_edit2 = qlineedit() # 修改父類
port_line_edit2.settext('65535')
# port_line_edit.move(325, 10) # 注釋
report_box_edit = qplaintextedit() # 修改父類
report_box_edit.setreadonly(true)
# report_box_edit.move(25, 70) # 注釋
report_box_edit.resize(400, 300)
start_btn = qpushbutton() # 修改父類
start_btn.settext('啟動')
# start_btn.move(450, 10) # 注釋
start_btn.resize(80, 22)
copy_all_btn = qpushbutton() # 修改父類
copy_all_btn.settext('複製全文')
# copy_all_btn.move(450, 70) # 注釋
copy_all_btn.resize(80, 22)
copy_ori_btn = qpushbutton() # 修改父類
copy_ori_btn.settext('複製原文')
# copy_ori_btn.move(450, 100) # 注釋
copy_ori_btn.resize(80, 22)
clear_btn = qpushbutton() # 修改父類
clear_btn.settext('清空')
# clear_btn.move(450, 150) # 注釋
clear_btn.resize(80, 22)
first_group_box = qgroupbox() # 第乙個分組框組控制項
first_group_box.settitle('引數設定')
second_group_box = qgroupbox() # 第二個分組框組控制項
second_group_box.settitle('埠開放情況')
first_h_layout = qhboxlayout() # 第乙個橫向布局容器,屬於第乙個分組框控制項
first_h_layout.addstretch(1)
second_h_layout = qhboxlayout() # 第二個橫向布局容器,屬於第乙個分組框控制項
first_v_layout = qvboxlayout() # 第乙個縱向布局容器,屬於第二個橫向布局容器
second_v_layout = qvboxlayout() # 第二個縱向布局容器,屬於第二個橫向布局容器
first_h_layout.addwidget(ip_line_edit)
first_h_layout.addwidget(thread_label)
first_h_layout.addwidget(thread_line_edit)
first_h_layout.addwidget(port_label)
first_h_layout.addwidget(port_line_edit1)
first_h_layout.addwidget(port_label2)
first_h_layout.addwidget(port_line_edit2)
first_h_layout.addwidget(start_btn)
first_group_box.setlayout(first_h_layout)
first_v_layout.addwidget(report_box_edit)
second_v_layout.addwidget(copy_all_btn)
second_v_layout.addwidget(copy_ori_btn)
second_v_layout.addwidget(clear_btn)
second_h_layout.additem(first_v_layout)
second_h_layout.additem(second_v_layout)
second_group_box.setlayout(second_h_layout)
layout = qvboxlayout()
layout.addwidget(first_group_box)
layout.addwidget(second_group_box)
window.setlayout(layout)
status_bar = qstatusbar(window)
status_bar.move(0, 450)
bar_label = qlabel(status_bar)
bar_label.settext('準備就緒')
bar_label.move(5, 5)
window.show() # 顯示窗體
sys.exit()
執行之後,出現介面如下:
看起來是不是有些像模像樣了?
裡面有不少坑,所以花了不少時間,搞定這個介面,搞明白裡的坑,已經快晚上八點了。
所以限於時間,只能明年再來講了。
明天就是明年了,祝大家新的一年裡能夠開開心心、健健康康、學習進步、公升職加薪!
by 洛城
2020.12.31 19:41
用Python做乙個名片管理系統
該程式包含選單模組,具有新增 修改 刪除 指定查詢名片資訊的功能。coding gbk defdisplay menu print 10 print gf名片管理系統1.0 print 1.新增名片 print 2.刪除名片 print 3.修改名片 print 4.查詢名片 print 5.獲取所...
用rhino做乙個地球
利用全球的地形圖,根據灰度生成高度不一的柱體 將球的uv展開 柱體鋪滿uv,使用曲面流動到球上 準備一張地形圖,這裡隨便找了乙個全球地形圖,有灰度區分高度的最好,顏色的區分的相對的高程不夠真實。開啟rhino,繪製乙個球,將球的uv展開。根據uv的大小繪製乙個面,用於在grasshopper中拾取作...
用Python做乙個久坐提醒小助手
不論是日常的工作還是學習,現代年輕人在電腦螢幕時長資料能讓人驚掉下巴,繼而引發一系列身體不適的現象。小李也是久坐族中的一員,為了時刻提醒自己起來活動活動,我開發了一款基於pythongui程式設計的久坐提醒小助手。整體的構思類似於乙個番茄時鐘,提供乙個倒計時功能並且在完成計時時發出警告。主要分為如下...