• python3如何使用QT编写基础的对话框程序
  • 发布于 2天前
  • 26 热度
    0 评论
  • 怅忘归
  • 0 粉丝 30 篇博客
  •   
操作系统 :Windows 10_x64
Python版本:3.9.13
PySide版本: 6.9.0

日常开发过程中,有时也需要写一些对话框之类的界面程序,用于进行自测或功能验证。虽然可以使用MFC进行验证,但毕竟需要编译,比较繁琐,更希望可以用python这类的脚本语言进行编写。今天记录下在Window10环境下,python3如何使用QT编写基础的对话框程序,我将从以下几个方面进行展开:
1.环境准备
2.相关组件介绍

3.使用示例及运行效果


一、环境准备
这里使用Qt for Python项目封装的PySide6,对应的是  Qt 6.0+ 版本。
Qt for Python项目地址:https://doc.qt.io/qtforpython-6/

PySide6地址: https://pypi.org/project/PySide6/
安装命令:
pip install PySide6
二、相关组件介绍
这里简单介绍下后续示例用到的组件,并提供对于的文档地址,更多信息请参考官方文档。
1、QDialog组件
用于创建对话框,可作为主程序的窗口。
文档地址:https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QDialog.html#PySide6.QtWidgets.QDialog

【常用方法】
resize:设置窗口大小。
exec: 以模态对话框的形式进行展示。
更多方法请参考官方文档。

2、QTextEdit组件
用于创建文本框,可作为应用程序的编辑器。
文档地址:https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QTextEdit.html#PySide6.QtWidgets.QTextEdit

【常用方法】
setPlainText : 用于设置文本框的内容。
append : 用于向文本框追加内容。
moveCursor : 移动光标位置。
更多方法请参考官方文档。

3、QDialogButtonBox组件
用于创建对话框的按钮。
文档地址:https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QDialogButtonBox.html

对话框按钮可使用自带的确认、取消功能,可用accepted、rejected进行信号连接。
使用示例:
button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok
                              | QDialogButtonBox.StandardButton.Cancel)
button_box.accepted.connect(self.accept)
button_box.rejected.connect(self.reject)
具体属性、方法及信号等请参考官方文档。

4、QVBoxLayout组件
用于创建垂直布局。
文档地址:https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QVBoxLayout.html#PySide6.QtWidgets.QVBoxLayout

【常用方法】
setMenuBar : 设置菜单栏。
addWidget : 添加Widget组件。
更多方法请参考官方文档。

5、QHBoxLayout组件
用于创建水平布局。
文档地址: https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QHBoxLayout.html#PySide6.QtWidgets.QHBoxLayout

【常用方法】
setMenuBar : 设置菜单栏。
addWidget : 添加Widget组件。
更多方法请参考官方文档。

6、QGroupBox组件
用于创建带标题的分组框。
文档地址:https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QGroupBox.html#PySide6.QtWidgets.QGroupBox

【常用方法】
setLayout : 设置分组框的布局。
更多方法请参考官方文档。

7、QPushButton组件
用于创建按钮。
文档地址:https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QPushButton.html#PySide6.QtWidgets.QPushButton

对于按钮来说,主要是触发点击动作,可通过 clicked 信号实现。
更多属性、方法及信号请参考官方文档。

三、使用示例
这里提供一个综合示例。
示例代码如下:
import os,sys,datetime
from PySide6 import QtCore
from PySide6.QtWidgets import (QApplication, QComboBox, QDialog,
                               QDialogButtonBox, QGridLayout, QGroupBox,
                               QFormLayout, QHBoxLayout, QLabel, QLineEdit,
                               QMenu, QMenuBar, QPushButton, QSpinBox,
                               QTextEdit, QVBoxLayout)
class Dialog(QDialog):
    def __init__(self):
        super().__init__()

        self.create_menu()
        self.create_hold_box()
        self.big_editor = QTextEdit()
        button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok
                                      | QDialogButtonBox.StandardButton.Cancel)
        button_box.accepted.connect(self.accept)
        button_box.rejected.connect(self.reject)
        main_layout = QVBoxLayout()
        main_layout.setMenuBar(self._menu_bar)
        main_layout.addWidget(self.hGroupBox)
        main_layout.addWidget(self.big_editor)
        main_layout.addWidget(button_box)
        self.setLayout(main_layout)
        self.setWindowTitle("dialog test1")
        self.big_editor.setPlainText(str(datetime.datetime.now()) + " init ok")

    def appenLogMsg(self,msg):
        now = datetime.datetime.now()
        curMsg = str(now) + " " + msg
        self.big_editor.append(curMsg)
        self.big_editor.moveCursor(QtGui.QTextCursor.End)
    def create_menu(self):
        self._menu_bar = QMenuBar()
        self._file_menu = QMenu("&File", self)
        self._exit_action = self._file_menu.addAction("Exit")
        self._menu_bar.addMenu(self._file_menu)
        self._exit_action.triggered.connect(self.accept)
    def create_hold_box(self):
        self.hGroupBox = QGroupBox("hold/unHold")
        layout = QHBoxLayout()
        self.btnHold = QPushButton("Hold")
        self.btnUnHold = QPushButton("unHold")

        layout.addWidget(self.btnHold)
        layout.addWidget(self.btnUnHold)
        self.hGroupBox.setLayout(layout)

        self.btnHold.clicked.connect(self.actionHold)
        self.btnUnHold.clicked.connect(self.actionUnHold)
    @QtCore.Slot()
    def actionHold(self):
        self.appenLogMsg("do hold")
    @QtCore.Slot()
    def actionUnHold(self):
        self.appenLogMsg("do unhold")
   // 堆代码 duidaima.com
if __name__ == "__main__":
    app = QApplication([])
    dialog = Dialog()
    dialog.resize(800, 600)
    sys.exit(dialog.exec())
运行效果如下:

好,就这么多了,别忘了点赞哈!
用户评论