Python 图形界面设计:PyQt6实现一个简单的ping功能小软件

2023-06-0516:09:52编程语言入门到精通Comments1,540 views字数 4835阅读模式

学习PyQt6,PyQt6 是一个用于创建图形用户界面(GUI)应用程序的 Python 库,它提供了对 Qt 框架的完整绑定和封装。Qt 是一个功能强大、跨平台的 C++ 应用程序开发框架,被广泛用于开发跨平台的 GUI 应用程序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html

  • PyQt6库允许开发人员使用Python语言创建丰富、交互式的GUI应用程序,具有各种功能和特性。以下是PyQt6的一些主要特点和优势:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html
  • 跨平台支持:PyQt6支持多个平台,包括Windows、macOS、Linux和其他一些操作系统。这意味着您可以使用相同的代码基础轻松地在不同的操作系统上构建应用程序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html
  • 强大的GUI控件:PyQt6提供了大量的Qt控件和小部件,包括按钮、标签、文本框、列表框、表格、菜单等等。这些控件使开发人员能够创建各种界面元素来满足应用程序的需求。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html
  • 丰富的功能和特性:PyQt6提供了许多功能和特性,包括布局管理、事件处理、信号与槽机制、动画效果、绘图、多线程支持、数据库访问等等。这些功能使开发人员能够构建复杂和功能丰富的应用程序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html
  • 可扩展性:PyQt6是一个灵活的库,它允许开发人员根据需要进行自定义和扩展。您可以使用Qt的底层功能和API,编写自己的定制控件和功能。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html
  • 文档和社区支持:PyQt6拥有详细的文档和丰富的社区支持,这使得学习和使用PyQt6变得更加容易。您可以在文档中找到大量的示例代码、教程和指南,以及在社区中获得帮助和支持。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html

前几天转发了一个PyQt6的开发的一个小例子。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html

Python 图形界面设计:PyQt6实现一个简单的ping功能小软件

这几天也在加紧学习。PyQt6安装比较简单,便于打包程序,可以单独建立个虚拟环境:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html

conda create --name PyQt6 python=3.9
pip install PyQt6
pip install pyqt6-tools

PyQt6-tools安装好后,会有一个Qt Designer设计器,可以拖动进行简单的界面设计,再通过pyuic6.exe这个程序把设计好的ui界面转化成py代码,在这些代码的基础上就可以实现有图形界面的python代码开发了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html

Python 图形界面设计:PyQt6实现一个简单的ping功能小软件

比如设计这样一个界面:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html

Python 图形界面设计:PyQt6实现一个简单的ping功能小软件

把设计好的界面保存成ColorD.ui,通过pyuic6.exe把ui转化成py代码。搜索pyuic6.exe文件的位置,把这个路径加入到系统path。在cmd命令行输入:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html

pyuic6 -x ColorD.ui -o ColorD.py

转好的代码如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html



from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.QtWidgets import QColorDialog,QFontDialog


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        self.verticalLayout = QtWidgets.QVBoxLayout(Form)
        self.verticalLayout.setObjectName("verticalLayout")
        self.textEdit = QtWidgets.QTextEdit(parent=Form)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.textEdit.setFont(font)
        self.textEdit.setObjectName("textEdit")
        self.verticalLayout.addWidget(self.textEdit)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.pushButton = QtWidgets.QPushButton(parent=Form)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.pushButton)
        self.pushButton.clicked.connect(self.ColorDialog)
        self.pushButton_2 = QtWidgets.QPushButton(parent=Form)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_2.clicked.connect(self.fontDialog)
        self.horizontalLayout.addWidget(self.pushButton_2)
        self.verticalLayout.addLayout(self.horizontalLayout)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)


    def ColorDialog(self):
        color = QColorDialog.getColor()
        self.textEdit.setTextColor(color)

    def fontDialog(self):
        font,ok = QFontDialog.getFont()
        if ok:
            self.textEdit.setFont(font)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "Color Dialog"))
        self.pushButton_2.setText(_translate("Form", "Font Dialog"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication( sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec())

运行:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html

Python 图形界面设计:PyQt6实现一个简单的ping功能小软件

我想做一个带有图形界面的一个Ping的程序,提前准备一个csv的ping列表,三列,前两是名称,第三列是ip,这个表启动程序自动加载,放入到到QTableWidget中,按一定时间间隔ping这些ip列表,把ping的结果放入到QLineEdit中显示,ping通的用绿色字显示,ping不通用红色字显示,并播放一个提示音。最后把Ping的结果总结一下,几通几不能。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html

设计好的界面如下,这个是直接用代码写的,不是用Qt Designer设计的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html

Python 图形界面设计:PyQt6实现一个简单的ping功能小软件

执行结果如图:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html

Python 图形界面设计:PyQt6实现一个简单的ping功能小软件
Python 图形界面设计:PyQt6实现一个简单的ping功能小软件

代码方面,按钮QPushButton,与动作绑定:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html

hbox_layout1 = QHBoxLayout()
        self.scan_button = QPushButton("开始扫描")
        self.scan_button.clicked.connect(self.start_scan)
        hbox_layout1.addWidget(self.scan_button)

加载QTableWidget的表,拖动窗口大小时,表格随拖动变化:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html

self.table_widget = QTableWidget()
        self.table_widget.setColumnCount(3) 
        self.table_widget.setHorizontalHeaderLabels(["台站名", "测项名", "IP地址"])
        self.table_widget.setRowCount(len(self.ip_list))
        self.table_widget.cellChanged.connect(self.handle_cell_changed)
        self.table_widget.setEditTriggers(QTableWidget.EditTrigger.NoEditTriggers)
        self.table_widget.setSelectionBehavior(QTableWidget.SelectionBehavior.SelectRows)
        self.table_widget.setSelectionMode(QTableWidget.SelectionMode.MultiSelection)

        for row, item in enumerate(self.ip_list):
            station_name, measurement_name, ip = item
            #self.table_widget.setItem(row, 0, QTableWidgetItem(str(row + 1)))  # 序号从1开始
            self.table_widget.setItem(row, 0, QTableWidgetItem(station_name))
            self.table_widget.setItem(row, 1, QTableWidgetItem(measurement_name))
            self.table_widget.setItem(row, 2, QTableWidgetItem("10.23.*.*"))

        self.table_widget.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
        self.table_widget.verticalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
        layout.addWidget(self.table_widget)

这个软件功能比较简单,先运行几天,再填加新的功能。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44876.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/44876.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定