前段时间一直有在学习pyqt的相关知识,今天就给大家分享一下借助豆包MarsCode开发的一款便捷使用ADB的小工具。
结合工作中使用场景,平常比较常用的abd命令,无非是获取设备、安装、卸载、获取设备名称、分辨率、日志、截图等, 我打算界面分三部分:
左侧控制台:主要用来获取设备、安装、卸载等;
中间控制台:主要用来输出adb命令执行结果;
右侧控制台:主要用来操作截图、获取设备信息等 整体布局采用:网格布局QGridLayout。
self.setWindowTitle('Mobile Tool')
self.setGeometry(100, 100, 1000, 600)
这两行代码设置了窗口的标题和大小。窗口的标题被设置为"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, 6, 0, 1, 5, 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, 0, 0, 1, 4, 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 + 1, 0, 1, 3, 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帮助快速高效解决编程中遇到的问题。
链接:https://juejin.cn/post/7418378848401670154
本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除