• PyQT6关联信号槽 (六) 百篇文章学PyQT6


            本文章是百篇文章学PyQT6的第六篇,本文讲述如何使用PySide创建UI界面,并且关联入PyCharm 新建的项目中成功运行第一个PyQT程序,并且使用 信号槽 connect 到函数,在写博客和学习的过程中会遇到很多问题,例如:PyQT信号槽在网上很多博客都是PyQT5、或者PyQT4大部分都和PyQT6不一样,因为PyQT6比较新所以相关博客文章会比较少,博主在本篇文章中将遇到和踩过的坑总结出来,可以供大家参考,希望大家安装顺利。包括 安装、遇到问题的解决方案、怎么卸载全部解决方案。

    本文作者原创,未经允许禁止转载。

    PyQT6关联信号槽 (六) 百篇文章学PyQT6目录

    1 设计界面

    2 转换文件

     3 加入PYQT6项目

    4 建立信号槽

    5 详解步骤

    5.1 头文件

    5.2 信号槽

    5.3 异常

     6 运行截图


    1 设计界面

    Windows建 + R --> CMD --> 输入命令 --> 创建

    pyside6-designer

    2 转换文件

            可以先打开CMD CD进入UI文件目录,也可以在目录Shift + 鼠标右键 直接终端打开。

    pyside6-uic untitled.ui -o untitled.py

     3 加入PYQT6项目

            将生成的py文件放入和项目根目录,并且加载入项目。

      

    1. # -*- coding: utf-8 -*-
    2. ################################################################################
    3. ## Form generated from reading UI file 'untitled.ui'
    4. ##
    5. ## Created by: Qt User Interface Compiler version 6.4.0
    6. ##
    7. ## WARNING! All changes made in this file will be lost when recompiling UI file!
    8. ################################################################################
    9. from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    10. QMetaObject, QObject, QPoint, QRect,
    11. QSize, QTime, QUrl, Qt)
    12. from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    13. QFont, QFontDatabase, QGradient, QIcon,
    14. QImage, QKeySequence, QLinearGradient, QPainter,
    15. QPalette, QPixmap, QRadialGradient, QTransform)
    16. from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QDialog,
    17. QGroupBox, QLabel, QLineEdit, QPushButton,
    18. QRadioButton, QSizePolicy, QWidget)
    19. class Ui_Dialog(object):
    20. def setupUi(self, Dialog):
    21. if not Dialog.objectName():
    22. Dialog.setObjectName(u"Dialog")
    23. Dialog.resize(785, 620)
    24. self.groupBox = QGroupBox(Dialog)
    25. self.groupBox.setObjectName(u"groupBox")
    26. self.groupBox.setGeometry(QRect(410, 430, 360, 170))
    27. self.pushButton_2 = QPushButton(self.groupBox)
    28. self.pushButton_2.setObjectName(u"pushButton_2")
    29. self.pushButton_2.setGeometry(QRect(190, 100, 150, 40))
    30. self.lineEdit = QLineEdit(self.groupBox)
    31. self.lineEdit.setObjectName(u"lineEdit")
    32. self.lineEdit.setGeometry(QRect(40, 40, 300, 40))
    33. self.pushButton = QPushButton(self.groupBox)
    34. self.pushButton.setObjectName(u"pushButton")
    35. self.pushButton.setGeometry(QRect(40, 100, 150, 40))
    36. self.groupBox_2 = QGroupBox(Dialog)
    37. self.groupBox_2.setObjectName(u"groupBox_2")
    38. self.groupBox_2.setGeometry(QRect(20, 430, 360, 170))
    39. self.pushButton_3 = QPushButton(self.groupBox_2)
    40. self.pushButton_3.setObjectName(u"pushButton_3")
    41. self.pushButton_3.setGeometry(QRect(80, 40, 200, 100))
    42. self.groupBox_3 = QGroupBox(Dialog)
    43. self.groupBox_3.setObjectName(u"groupBox_3")
    44. self.groupBox_3.setGeometry(QRect(20, 230, 360, 170))
    45. self.checkBox = QCheckBox(self.groupBox_3)
    46. self.checkBox.setObjectName(u"checkBox")
    47. self.checkBox.setGeometry(QRect(40, 40, 79, 20))
    48. self.checkBox_2 = QCheckBox(self.groupBox_3)
    49. self.checkBox_2.setObjectName(u"checkBox_2")
    50. self.checkBox_2.setGeometry(QRect(170, 40, 79, 20))
    51. self.checkBox_3 = QCheckBox(self.groupBox_3)
    52. self.checkBox_3.setObjectName(u"checkBox_3")
    53. self.checkBox_3.setGeometry(QRect(40, 110, 79, 20))
    54. self.checkBox_4 = QCheckBox(self.groupBox_3)
    55. self.checkBox_4.setObjectName(u"checkBox_4")
    56. self.checkBox_4.setGeometry(QRect(180, 110, 79, 20))
    57. self.groupBox_4 = QGroupBox(Dialog)
    58. self.groupBox_4.setObjectName(u"groupBox_4")
    59. self.groupBox_4.setGeometry(QRect(410, 230, 360, 170))
    60. self.radioButton = QRadioButton(self.groupBox_4)
    61. self.radioButton.setObjectName(u"radioButton")
    62. self.radioButton.setGeometry(QRect(40, 40, 95, 20))
    63. self.radioButton_2 = QRadioButton(self.groupBox_4)
    64. self.radioButton_2.setObjectName(u"radioButton_2")
    65. self.radioButton_2.setGeometry(QRect(180, 40, 95, 20))
    66. self.radioButton_3 = QRadioButton(self.groupBox_4)
    67. self.radioButton_3.setObjectName(u"radioButton_3")
    68. self.radioButton_3.setGeometry(QRect(40, 110, 95, 20))
    69. self.radioButton_4 = QRadioButton(self.groupBox_4)
    70. self.radioButton_4.setObjectName(u"radioButton_4")
    71. self.radioButton_4.setGeometry(QRect(180, 110, 95, 20))
    72. self.groupBox_6 = QGroupBox(Dialog)
    73. self.groupBox_6.setObjectName(u"groupBox_6")
    74. self.groupBox_6.setGeometry(QRect(20, 30, 360, 170))
    75. self.comboBox = QComboBox(self.groupBox_6)
    76. self.comboBox.setObjectName(u"comboBox")
    77. self.comboBox.setGeometry(QRect(30, 50, 291, 21))
    78. self.comboBox_2 = QComboBox(self.groupBox_6)
    79. self.comboBox_2.setObjectName(u"comboBox_2")
    80. self.comboBox_2.setGeometry(QRect(30, 110, 281, 21))
    81. self.groupBox_5 = QGroupBox(Dialog)
    82. self.groupBox_5.setObjectName(u"groupBox_5")
    83. self.groupBox_5.setGeometry(QRect(410, 30, 360, 170))
    84. self.label = QLabel(self.groupBox_5)
    85. self.label.setObjectName(u"label")
    86. self.label.setGeometry(QRect(10, 20, 241, 101))
    87. self.pushButton_4 = QPushButton(self.groupBox_5)
    88. self.pushButton_4.setObjectName(u"pushButton_4")
    89. self.pushButton_4.setGeometry(QRect(260, 20, 91, 61))
    90. self.pushButton_5 = QPushButton(self.groupBox_5)
    91. self.pushButton_5.setObjectName(u"pushButton_5")
    92. self.pushButton_5.setGeometry(QRect(260, 100, 91, 61))
    93. self.lineEdit_2 = QLineEdit(self.groupBox_5)
    94. self.lineEdit_2.setObjectName(u"lineEdit_2")
    95. self.lineEdit_2.setGeometry(QRect(0, 140, 251, 20))
    96. self.retranslateUi(Dialog)
    97. QMetaObject.connectSlotsByName(Dialog)
    98. # setupUi
    99. def retranslateUi(self, Dialog):
    100. Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None))
    101. self.groupBox.setTitle(QCoreApplication.translate("Dialog", u"\u9009\u62e9\u6587\u4ef6", None))
    102. self.pushButton_2.setText(QCoreApplication.translate("Dialog", u"\u6e05\u9664\u663e\u793a\u6587\u4ef6", None))
    103. self.pushButton.setText(QCoreApplication.translate("Dialog", u"\u9009\u62e9\u6587\u4ef6\u76ee\u5f55", None))
    104. self.groupBox_2.setTitle(QCoreApplication.translate("Dialog", u"\u8c03\u7528\u5176\u5b83\u754c\u9762", None))
    105. self.pushButton_3.setText(QCoreApplication.translate("Dialog", u"\u5f39\u51fa\u754c\u9762", None))
    106. self.groupBox_3.setTitle(QCoreApplication.translate("Dialog", u"\u5355\u9009\u5217\u8868", None))
    107. self.checkBox.setText(QCoreApplication.translate("Dialog", u"CheckBox", None))
    108. self.checkBox_2.setText(QCoreApplication.translate("Dialog", u"CheckBox", None))
    109. self.checkBox_3.setText(QCoreApplication.translate("Dialog", u"CheckBox", None))
    110. self.checkBox_4.setText(QCoreApplication.translate("Dialog", u"CheckBox", None))
    111. self.groupBox_4.setTitle(QCoreApplication.translate("Dialog", u"radio\u5206\u7ec4", None))
    112. self.radioButton.setText(QCoreApplication.translate("Dialog", u"RadioButton", None))
    113. self.radioButton_2.setText(QCoreApplication.translate("Dialog", u"RadioButton", None))
    114. self.radioButton_3.setText(QCoreApplication.translate("Dialog", u"RadioButton", None))
    115. self.radioButton_4.setText(QCoreApplication.translate("Dialog", u"RadioButton", None))
    116. self.groupBox_6.setTitle(QCoreApplication.translate("Dialog", u"\u4e0b\u62c9\u6846\u5217\u8868", None))
    117. self.groupBox_5.setTitle(QCoreApplication.translate("Dialog", u"\u52a0\u8f7d\u56fe\u50cf\u5217\u8868", None))
    118. self.label.setText("")
    119. self.pushButton_4.setText(QCoreApplication.translate("Dialog", u"\u52a0\u8f7d", None))
    120. self.pushButton_5.setText(QCoreApplication.translate("Dialog", u"\u6e05\u9664", None))
    121. # retranslateUi

    4 建立信号槽

    1. import sys
    2. from PyQt6.uic.uiparser import QtCore
    3. from PySide6.QtWidgets import QApplication, QMainWindow, QMessageBox, QPushButton, QLabel, QWidget, QHBoxLayout
    4. from PySide6.QtCore import QFile, SIGNAL
    5. from untitled import Ui_Dialog
    6. class MainWindow(QMainWindow):
    7. def __init__(self):
    8. super(MainWindow, self).__init__()
    9. self.ui = Ui_Dialog()
    10. self.ui.setupUi(self)
    11. # 修改setupUi方法
    12. # self.pushButton_3.clicked.connect(self.show_message)
    13. self.setFixedSize(800, 700)
    14. self.setWindowTitle("QT 界面测试 CSDN: 双子座断点")
    15. # self.pushButton.clicked.connect(self.say_some_words("aa"))
    16. def slotBtnClicked():
    17. print("btn clicked..")
    18. # self.pushButton.clicked.connect(self.say_some_words("aa"))
    19. self.ui.comboBox.addItem("aa")
    20. self.ui.comboBox.addItem("bb")
    21. self.ui.comboBox.addItem("cc")
    22. MainWindow.connect(self.ui.pushButton_3, SIGNAL('clicked()'), slotBtnClicked)
    23. if __name__ == "__main__":
    24. app = QApplication(sys.argv)
    25. window = MainWindow()
    26. window.show()
    27. sys.exit(app.exec())

    5 详解步骤

            详细解释过程中遇到的难题和一开始不太懂的地方

    5.1 头文件

    1. #include
    2. from PySide6.QtWidgets import QApplication, QMainWindow, QMessageBox, QPushButton, QLabel, QWidget, QHBoxLayout

    5.2 信号槽

            在写本篇博客的过程中遇到的最大的问题就是信号槽的连接和关联,网上看相关博客大部分PyQT5都是以下方式连接:

    1. self.signal2.connect(self.sig1Call)
    2. send.sendmsg.connect(slot.get)
    1. # -*- coding: utf-8 -*-
    2. import sys
    3. from PySide6.QtWidgets import QMessageBox, QPushButton, QApplication, QWidget
    4. def show_msg():
    5. QMessageBox.information(widget, '信息提示框', 'Ok 弹出测试信息')
    6. app = QApplication(sys.argv)
    7. widget = QWidget()
    8. btn = QPushButton('测试点击按钮', widget)
    9. btn.clicked.connect(show_msg)
    10. widget.resize(300, 300)
    11. widget.show()
    12. sys.exit(app.exec())

            上面种种方法都不太行,可能是我刚接触PyQT6不是太熟,或者我使用的版本太新以上方法都不太行。然后想到了QT里面的写法

    connect(but, SIGNAL(XXXX), this, SLOT(XXXX));

            修改后PyQT6的写法,这个写法和大部分博客都不太一样,结果写出来还真成功了。

    MainWindow.connect(self.ui.pushButton_3, SIGNAL('clicked()'), slotBtnClicked)

    5.3 异常

     6 运行截图

    其它关联文章:

    PyCharm安装部署(一) 百篇文章学PyQT_双子座断点的博客-CSDN博客_pycharm部署

     Anaconda3安装部署(二) 百篇文章学PyQT_双子座断点的博客-CSDN博客_anaconda3 pyqt

    PyQT6 pip install (三) 百篇文章学PyQT_双子座断点的博客-CSDN博客

    PyCharm运行PyQT6 (四) 百篇文章学PyQT_双子座断点的博客-CSDN博客

    PySide创建界面关联项目(五) 百篇文章学PyQT_双子座断点的博客-CSDN博客_pyside项目

  • 相关阅读:
    TADHE车灯专用修复UV胶--汽车灯罩修复领域之光
    Windows 11 有望支持苹果 M1 Mac?微软和高通的秘密协议即将到期
    Codeforces Round #816 (Div. 2)
    Java实现从Redis中批量读取数据
    记一次通过REC获取服务器权限以及同服务器的网站权限
    nodejs+vue+elementui在线考试系统express vscode
    python+django高校教师科研成果管理系统pycharm源码lw
    Hologres Query管理及超时处理
    计算机网络——带你理解走进计算机网络
    zxing详细使用说明 java生成二维码、条形码
  • 原文地址:https://blog.csdn.net/qq_37529913/article/details/128090030