打造专属手机助手:用 PyQt6 玩转 ADB

科技   2024-11-07 17:31   上海  
点击蓝字,立即关注




前言



前段时间一直有在学习pyqt的相关知识,今天就给大家分享一下借助豆包MarsCode开发的一款便捷使用ADB的小工具。




功能设计



结合工作中使用场景,平常比较常用的abd命令,无非是获取设备、安装、卸载、获取设备名称、分辨率、日志、截图等, 我打算界面分三部分:

  • 左侧控制台:主要用来获取设备、安装、卸载等;

  • 中间控制台:主要用来输出adb命令执行结果;

  • 右侧控制台:主要用来操作截图、获取设备信息等 整体布局采用:网格布局QGridLayout。




功能实现



窗口设置


self.setWindowTitle('Mobile Tool')self.setGeometry(1001001000600)

这两行代码设置了窗口的标题和大小。窗口的标题被设置为"Mobile Tool",窗口的初始位置被设置为屏幕上的(100, 100)坐标,窗口的大小被设置为1000像素宽,600像素高。


主布局设置
main_widget = QWidget()main_layout = QGridLayout(main_widget)

这里创建了一个QWidget作为主窗口的容器,并设置了一个QGridLayout作为主布局。QGridLayout是一种网格布局管理器,它可以将窗口分成若干行和列,并将控件放置在这些网格中。


左侧控制台


布局

group_box_left = QGroupBox(main_widget)group_box_left.setTitle('左侧控制台')left_layout = QGridLayout(group_box_left)

创建了一个QGroupBox作为左侧控制台的容器,并设置了其标题为"左侧控制台"。然后创建了一个QGridLayout作为左侧控制台的布局管理器。


控件

device_type_label = QLabel('设备类型')device_type_combo = QComboBox()device_type_combo.addItems(["Android""iOS"])

创建了一个QLabel用于显示"设备类型"的标签,以及一个QComboBox用于选择设备类型,并且添加了"Android"和"iOS"两个选项。

get_device_btn = QPushButton('获取设备')get_device_btn.clicked.connect(lambda: self.get_devices())self.device_id_combo = QComboBox()


创建了一个QPushButton用于触发获取设备的操作,并将其clicked信号连接到self.get_devices()方法。同时创建了一个QComboBox用于显示获取到的设备ID列表。

batch_install_btn = QPushButton('批量安装')batch_uninstall_btn = QPushButton('批量卸载')stop_task_btn = QPushButton('停止任务')clear_data_Btn = QPushButton('清空数据')


创建了几个按钮,分别用于批量安装、批量卸载、停止任务和清空数据操作。

note_label = QLabel('备注:请先选择设备类型,再点击获取设备按钮,然后再点击批量安装或批量卸载按钮。')note_label.setFont(QFont('Arial', 16))note_label.setWordWrap(True)


创建了一个备注标签,用于提示用户如何使用该工具。设置了字体为Arial,大小为16,并启用了自动换行。


左侧控制台布局添加控件

left_layout.addWidget(device_type_label, 0, 0, 1, 1, alignment=Qt.AlignmentFlag.AlignTop)left_layout.addWidget(device_type_combo, 0, 1, 1, 3, alignment=Qt.AlignmentFlag.AlignTop)left_layout.addWidget(get_device_btn, 1, 0, 1, 1, alignment=Qt.AlignmentFlag.AlignTop)left_layout.addWidget(self.device_id_combo, 1, 1, 1, 3, alignment=Qt.AlignmentFlag.AlignTop)left_layout.addWidget(batch_install_btn, 2, 0, 1, 3)left_layout.addWidget(batch_uninstall_btn, 3, 0, 1, 3)left_layout.addWidget(stop_task_btn, 4, 0, 1, 3)left_layout.addWidget(clear_data_Btn, 5, 0, 1, 3)left_layout.addWidget(note_label, 6015, alignment=Qt.AlignmentFlag.AlignTop)


将之前创建的控件添加到左侧控制台的布局中,并设置了它们在网格中的位置和对齐方式。


主布局添加左侧控制台

main_layout.addWidget(group_box_left, 0, 0, 1, 1, alignment=Qt.AlignmentFlag.AlignTop)


将左侧控制台的QGroupBox添加到主布局的(0, 0)位置,并设置了对齐方式为顶部对齐。


中间控制台


布局

group_box_center = QGroupBox(main_widget)group_box_center.setTitle('中间控制台')center_layout = QGridLayout(group_box_center)


创建了一个QGroupBox作为中间控制台的容器,并设置了其标题为"中间控制台"。然后创建了一个QGridLayout作为中间控制台的布局管理器。


控件

self.devices_text = QPlainTextEdit()self.devices_text.setMaximumBlockCount(50000)


创建了一个 QPlainTextEdit 组件,用于显示执行命令的结果。设置了 QPlainTextEdit 的最大行数为 50000。


中间控制台布局添加控件

center_layout.addWidget(self.devices_text, 0014, alignment=Qt.AlignmentFlag.AlignTop)


将之前创建的控件添加到中间控制台的布局中,并设置了它们在网格中的位置和对齐方式。


主布局添加中间控制台

main_layout.addWidget(group_box_center, 0, 1, 1, 1, alignment=Qt.AlignmentFlag.AlignTop)

将中间控制台的QGroupBox添加到主布局的(0, 1)位置,并设置了对齐方式为顶部对齐。


右侧控制台


布局

group_box_right = QGroupBox(main_widget)group_box_right.setTitle('右侧控制台')right_layout = QGridLayout(group_box_right)


创建了一个QGroupBox作为右侧控制台的容器,并设置了其标题为"右侧控制台"。然后创建了一个QGridLayout作为右侧控制台的布局管理器。


控件及布局添加控件

system_info_label = QLabel('常用功能')system_info_label.setFont(QFont('Arial', 16, QFont.Weight.Bold))right_layout.addWidget(system_info_label, 0, 0, 1, 1, alignment=Qt.AlignmentFlag.AlignTop)
for index, info in enumerate(["获取手机名称", "获取手机型号", "获取手机分辨率", "获取手机日志", "崩溃日志", "截图"]): btn = QPushButton(info)    right_layout.addWidget(btn, index + 1013, alignment=Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignLeft)


创建了一个QLabel组件,并设置了其文本内容为"常用功能",设置了标签的字体为Arial,大小为16,并且加粗显示。


将标签添加到右侧控制台的网格布局(right_layout)中,位于第0行第0列,占用1行1列,并设置对齐方式为顶部对齐。


使用了一个for循环来创建六个按钮,每个按钮的文本内容分别为"获取手机名称"、"获取手机型号"、"获取手机分辨率"、"获取手机日志"、"崩溃日志"和"截图"。这些按钮被添加到右侧控制台的网格布局中,从第1行开始,占用1行3列,并设置对齐方式为顶部对齐和左对齐。


主布局添加中间控制台

main_layout.addWidget(group_box_right, 0, 2, 1, 1, alignment=Qt.AlignmentFlag.AlignTop)

将右侧控制台的QGroupBox添加到主布局的(0, 2)位置,并设置了对齐方式为顶部对齐。


设置主布局


self.setLayout(main_layout)

将主布局设置为主窗口的布局。




效果展示



代码编写完成,在豆包中点击运行时,截图所示:


发现报错了,AI提供的解决方案是缺少图形驱动,暂时还没有解决,把代码复制到本地执行,效果如下:

然后插上安卓设备,点击获取设备,效果如下:

其他功能类似。




最后



这个小工具还在不断完善中,之后还可以支持iOS设备。整体使用豆包MarsCode的体验还是不错的,可以借助AI帮助快速高效解决编程中遇到的问题。


END


链接:https://juejin.cn/post/7418378848401670154

本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除




点点赞
点分享
点在看

51Testing软件测试网
博为峰20周年,青春正当燃,一起向未来! 博为峰51Testing软件测试网提供各种线上招聘、线上课程等网络服务,出版软件测试系列丛书及电子杂志,组织线上技术交流活动;同时还举办多种线下公益活动,如软件测试沙龙、软件测试专场招聘会等。
 最新文章