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

news2024/12/23 0:31:18

        本文章是百篇文章学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文件放入和项目根目录,并且加载入项目。

  

# -*- coding: utf-8 -*-

################################################################################
## Form generated from reading UI file 'untitled.ui'
##
## Created by: Qt User Interface Compiler version 6.4.0
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QDialog,
    QGroupBox, QLabel, QLineEdit, QPushButton,
    QRadioButton, QSizePolicy, QWidget)

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        if not Dialog.objectName():
            Dialog.setObjectName(u"Dialog")
        Dialog.resize(785, 620)
        self.groupBox = QGroupBox(Dialog)
        self.groupBox.setObjectName(u"groupBox")
        self.groupBox.setGeometry(QRect(410, 430, 360, 170))
        self.pushButton_2 = QPushButton(self.groupBox)
        self.pushButton_2.setObjectName(u"pushButton_2")
        self.pushButton_2.setGeometry(QRect(190, 100, 150, 40))
        self.lineEdit = QLineEdit(self.groupBox)
        self.lineEdit.setObjectName(u"lineEdit")
        self.lineEdit.setGeometry(QRect(40, 40, 300, 40))
        self.pushButton = QPushButton(self.groupBox)
        self.pushButton.setObjectName(u"pushButton")
        self.pushButton.setGeometry(QRect(40, 100, 150, 40))
        self.groupBox_2 = QGroupBox(Dialog)
        self.groupBox_2.setObjectName(u"groupBox_2")
        self.groupBox_2.setGeometry(QRect(20, 430, 360, 170))
        self.pushButton_3 = QPushButton(self.groupBox_2)
        self.pushButton_3.setObjectName(u"pushButton_3")
        self.pushButton_3.setGeometry(QRect(80, 40, 200, 100))
        self.groupBox_3 = QGroupBox(Dialog)
        self.groupBox_3.setObjectName(u"groupBox_3")
        self.groupBox_3.setGeometry(QRect(20, 230, 360, 170))
        self.checkBox = QCheckBox(self.groupBox_3)
        self.checkBox.setObjectName(u"checkBox")
        self.checkBox.setGeometry(QRect(40, 40, 79, 20))
        self.checkBox_2 = QCheckBox(self.groupBox_3)
        self.checkBox_2.setObjectName(u"checkBox_2")
        self.checkBox_2.setGeometry(QRect(170, 40, 79, 20))
        self.checkBox_3 = QCheckBox(self.groupBox_3)
        self.checkBox_3.setObjectName(u"checkBox_3")
        self.checkBox_3.setGeometry(QRect(40, 110, 79, 20))
        self.checkBox_4 = QCheckBox(self.groupBox_3)
        self.checkBox_4.setObjectName(u"checkBox_4")
        self.checkBox_4.setGeometry(QRect(180, 110, 79, 20))
        self.groupBox_4 = QGroupBox(Dialog)
        self.groupBox_4.setObjectName(u"groupBox_4")
        self.groupBox_4.setGeometry(QRect(410, 230, 360, 170))
        self.radioButton = QRadioButton(self.groupBox_4)
        self.radioButton.setObjectName(u"radioButton")
        self.radioButton.setGeometry(QRect(40, 40, 95, 20))
        self.radioButton_2 = QRadioButton(self.groupBox_4)
        self.radioButton_2.setObjectName(u"radioButton_2")
        self.radioButton_2.setGeometry(QRect(180, 40, 95, 20))
        self.radioButton_3 = QRadioButton(self.groupBox_4)
        self.radioButton_3.setObjectName(u"radioButton_3")
        self.radioButton_3.setGeometry(QRect(40, 110, 95, 20))
        self.radioButton_4 = QRadioButton(self.groupBox_4)
        self.radioButton_4.setObjectName(u"radioButton_4")
        self.radioButton_4.setGeometry(QRect(180, 110, 95, 20))
        self.groupBox_6 = QGroupBox(Dialog)
        self.groupBox_6.setObjectName(u"groupBox_6")
        self.groupBox_6.setGeometry(QRect(20, 30, 360, 170))
        self.comboBox = QComboBox(self.groupBox_6)
        self.comboBox.setObjectName(u"comboBox")
        self.comboBox.setGeometry(QRect(30, 50, 291, 21))
        self.comboBox_2 = QComboBox(self.groupBox_6)
        self.comboBox_2.setObjectName(u"comboBox_2")
        self.comboBox_2.setGeometry(QRect(30, 110, 281, 21))
        self.groupBox_5 = QGroupBox(Dialog)
        self.groupBox_5.setObjectName(u"groupBox_5")
        self.groupBox_5.setGeometry(QRect(410, 30, 360, 170))
        self.label = QLabel(self.groupBox_5)
        self.label.setObjectName(u"label")
        self.label.setGeometry(QRect(10, 20, 241, 101))
        self.pushButton_4 = QPushButton(self.groupBox_5)
        self.pushButton_4.setObjectName(u"pushButton_4")
        self.pushButton_4.setGeometry(QRect(260, 20, 91, 61))
        self.pushButton_5 = QPushButton(self.groupBox_5)
        self.pushButton_5.setObjectName(u"pushButton_5")
        self.pushButton_5.setGeometry(QRect(260, 100, 91, 61))
        self.lineEdit_2 = QLineEdit(self.groupBox_5)
        self.lineEdit_2.setObjectName(u"lineEdit_2")
        self.lineEdit_2.setGeometry(QRect(0, 140, 251, 20))

        self.retranslateUi(Dialog)

        QMetaObject.connectSlotsByName(Dialog)
    # setupUi

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None))
        self.groupBox.setTitle(QCoreApplication.translate("Dialog", u"\u9009\u62e9\u6587\u4ef6", None))
        self.pushButton_2.setText(QCoreApplication.translate("Dialog", u"\u6e05\u9664\u663e\u793a\u6587\u4ef6", None))
        self.pushButton.setText(QCoreApplication.translate("Dialog", u"\u9009\u62e9\u6587\u4ef6\u76ee\u5f55", None))
        self.groupBox_2.setTitle(QCoreApplication.translate("Dialog", u"\u8c03\u7528\u5176\u5b83\u754c\u9762", None))
        self.pushButton_3.setText(QCoreApplication.translate("Dialog", u"\u5f39\u51fa\u754c\u9762", None))
        self.groupBox_3.setTitle(QCoreApplication.translate("Dialog", u"\u5355\u9009\u5217\u8868", None))
        self.checkBox.setText(QCoreApplication.translate("Dialog", u"CheckBox", None))
        self.checkBox_2.setText(QCoreApplication.translate("Dialog", u"CheckBox", None))
        self.checkBox_3.setText(QCoreApplication.translate("Dialog", u"CheckBox", None))
        self.checkBox_4.setText(QCoreApplication.translate("Dialog", u"CheckBox", None))
        self.groupBox_4.setTitle(QCoreApplication.translate("Dialog", u"radio\u5206\u7ec4", None))
        self.radioButton.setText(QCoreApplication.translate("Dialog", u"RadioButton", None))
        self.radioButton_2.setText(QCoreApplication.translate("Dialog", u"RadioButton", None))
        self.radioButton_3.setText(QCoreApplication.translate("Dialog", u"RadioButton", None))
        self.radioButton_4.setText(QCoreApplication.translate("Dialog", u"RadioButton", None))
        self.groupBox_6.setTitle(QCoreApplication.translate("Dialog", u"\u4e0b\u62c9\u6846\u5217\u8868", None))
        self.groupBox_5.setTitle(QCoreApplication.translate("Dialog", u"\u52a0\u8f7d\u56fe\u50cf\u5217\u8868", None))
        self.label.setText("")
        self.pushButton_4.setText(QCoreApplication.translate("Dialog", u"\u52a0\u8f7d", None))
        self.pushButton_5.setText(QCoreApplication.translate("Dialog", u"\u6e05\u9664", None))
    # retranslateUi

4 建立信号槽

import sys

from PyQt6.uic.uiparser import QtCore
from PySide6.QtWidgets import QApplication, QMainWindow, QMessageBox, QPushButton, QLabel, QWidget, QHBoxLayout
from PySide6.QtCore import QFile, SIGNAL
from untitled import Ui_Dialog


class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

        # 修改setupUi方法
        # self.pushButton_3.clicked.connect(self.show_message)

        self.setFixedSize(800, 700)
        self.setWindowTitle("QT 界面测试 CSDN: 双子座断点")

        # self.pushButton.clicked.connect(self.say_some_words("aa"))
        def slotBtnClicked():
            print("btn clicked..")

        # self.pushButton.clicked.connect(self.say_some_words("aa"))

        self.ui.comboBox.addItem("aa")
        self.ui.comboBox.addItem("bb")
        self.ui.comboBox.addItem("cc")

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


if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = MainWindow()

    window.show()

    sys.exit(app.exec())

5 详解步骤

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

5.1 头文件

#include <XXX>
from PySide6.QtWidgets import QApplication, QMainWindow, QMessageBox, QPushButton, QLabel, QWidget, QHBoxLayout

5.2 信号槽

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

self.signal2.connect(self.sig1Call)
send.sendmsg.connect(slot.get)
    # -*- coding: utf-8 -*-
     
    import sys
    from PySide6.QtWidgets import QMessageBox, QPushButton, QApplication, QWidget
     
     
    def show_msg():
        QMessageBox.information(widget, '信息提示框', 'Ok 弹出测试信息')
     
     
    app = QApplication(sys.argv)
    widget = QWidget()
    btn = QPushButton('测试点击按钮', widget)
    btn.clicked.connect(show_msg)
    widget.resize(300, 300)
    widget.show()
    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项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python实现点选验证码识别, B站模拟登陆

话不多说&#xff0c;今天就分享一下如何用Python实现点选验证码识别&#xff0c;小破站模拟登陆 开发环境 Python 3.8Pycharm 2021.2谷歌浏览器谷歌驱动 模块使用 selenium >>> pip install selenium3.141.0 指定版本安装time打码平台 模块安装问题: -如果安装…

Java注解(Annotation)

一、什么是注解 个人理解&#xff0c;注解就是代码中的特殊标记&#xff0c;这些标记可以在编译、类加载、运行时被读取&#xff0c;从而做相对应的处理。 注解跟注释很像&#xff0c;区别是注释是给人看的&#xff1b;而注解是给程序看的&#xff0c;它可以被编译器读取。 …

ERP软件定价策略与模型设计

ERP软件定价(价格)的高低是ERP厂商整体竞争力强弱的一个重要指针&#xff0c;也是影响客户购买行为的重要因素。客户购买某一ERP软件&#xff0c;总是面临不同的ERP厂商﹑不同渠道的多种选择&#xff0c;ERP软件价格往往成了除软件功能﹑售后服务态度、实施水平等因素外&#x…

web前端-Ajax基础学习

web前端-Ajax基础学习1. Ajax基础描述1.1 URL地址的概念1.2 客户端和服务器的通信过程1.3 Ajax1.3.1 $.get()函数1.3.2 $.post()1.3.3 $.ajax()1.4 接口1.4.1 GET、POST方式请求的过程1.4.2 接口文档2. form表单与模版引擎2.1 表单的基本介绍2.2 form表单同步提交的缺点2.3 通过…

stm32 笔记 外部中断以及HAL库应用

外部中断 由外部设备发起的中断请求&#xff0c;会使得设备暂停当前的主程序&#xff0c;保存标志位并把当前指令压入堆栈&#xff0c;转而去执行中断的子程序。执行完毕后再弹出执行堆栈&#xff0c;恢复标志位&#xff0c;继续执行主程序。 STM32 的外部中断线 STM32的每个…

嵌入式 C语言/C++ 常见笔试、面试题 难疑点汇总(经典100道)

#pragma comment。将一个注释记录放置到对象文件或可执行文件中。 #pragma pack。用来改变编译器的字节对齐方式。 #pragma code_seg。它能够设置程序中的函数在obj文件中所在的代码段。如果未指定参数&#xff0c;函数将放置在默认代码段.text中 #pragma once。保证所在文件只…

Pytest接口测试框架实战项目搭建(三)

一、前言 前面相当于已经讲完整体框架搭建了&#xff0c;本篇主要讲述在实际业务系统的接口请求中&#xff0c;如何运用好该接口自动化测试框架。 二、步骤演示 1、在conf/api_path.py新增需要测试的接口&#xff0c;标黄底色为新加 存放测试接口仅这一个文件就行&#xff0c…

吉时利2604B系列数字源表,双通道,3A直流/10A脉冲

作为2600B系列源表SMU系列产品的一部分&#xff0c;2602B源表SMU是全新改良版双通道SMU&#xff0c;具有紧密集成的4象限设计&#xff0c;能同步源和测量电压/电流以提高研发到自动生产测试等应用的生产率。除保留了2602A的全部产品特点外&#xff0c;2602B还具有6位半分辨率、…

Android 面试题收集:Handler+Binder+Activity+时间分发机制+View绘制流程+……等

一、Handler相关知识 一个线程只有一个Looper&#xff0c;一个Messagequeue&#xff0c;可以创建多个handler。 1、Handler与Looper的关联是怎样的? 实例化 Handler 的时候 Handler 会去检查当前线程的 Looper 是否存在&#xff0c;如果不存在则会报异常&#xff0c;也就是…

关于TreeView的简单使用(Qt6.4.1)

前言 TreeView是在Qt6.3中加入的&#xff0c;弥补了Qt中无官方树图。笔者上手尝试了下&#xff0c;虽然有点麻烦&#xff0c;但官方也做了不少简化。 本次教程&#xff0c;笔者创建一个简单的示例&#xff0c;以帮助读者使用TreeView。 一、创建模型类 当前模型需要使用C定义…

人工智能概况笔记

文章目录一、人的智能与人工智能二、人工智能的发展历程三、人工智能的主要应用四、人工智能的伦理思考五、神经网络与深度学习六、国内外人工智能动向一、人的智能与人工智能 智能&#xff1a;基于推理的学习、理解和做出判断或意见的能力 人的智能&#xff08;Human Intell…

【数据结构-树】哈夫曼树及其应用

文章目录1 哈夫曼树的构造2 哈夫曼树的应用——哈夫曼编码3 相关例子1 哈夫曼树的构造 将 n 个结点作为 n 棵仅含一个节点的二叉树&#xff0c;构成森林 F在 F 中选取两棵权值最小的二叉树&#xff0c;作为新结点的左右子树&#xff0c;并将新结点的权值置为左、右子树的根结点…

Nodejs -- 前后端身份认证概念及在Express中使用认证(Session,Cookie,JWT)

文章目录前后端的身份认证1 Web开发模式1.1 服务器端渲染的Web开发模式1.2 前后端分离的Web开发模式1.3 如何选择Web开发模式2 身份认证2.1 什么是身份认证2.2 为什么需要身份认证2.3 不同开发模式下的身份认证3 Session认证机制3.1 HTTP协议的无状态性3.2 如何突破HTTP无状态的…

【STL】set集合

构造函数 std::set<std::string> myset;这条指令将会创建一个空的set容器 该容器会默认采用std::less< T >的排序规则对成员进行排序。 这种排序方法适用于内置的数据类型&#xff0c;比如整型、浮点型、字符串等等。 std::set<std::string> myset{"j…

Linux 之 Ubuntu 上 Vim 的安装、配置、常用命令的简单整理

Linux 之 Ubuntu 上 vim 的安装、配置、常用命令的简单整理 目录 Linux 之 Ubuntu 上 vim 的安装、配置、常用命令的简单整理 一、简单介绍 二、Vim 的安装 三、vim 的 32 种工作模式 四、vim 的一些基础配置&#xff0c;及其说明 五、普通模式下的常用操作命令 六、插入…

域自适应——Bidirectional Learning for Domain Adaptation of Semantic Segmentation

论文题目&#xff1a;Bidirectional Learning for Domain Adaptation of Semantic Segmentation 本文的域位移是针对虚拟数据和真实数据之间的。 本文的贡献是&#xff1a; 提出了一种语义分割的双向学习系统 &#xff0c;其是一个学习分割适应模型和图像翻译模型的闭环学习系…

如何安装使用Jupyter Notebook?

大家好鸭&#xff01;我是小熊猫~ 今天来给大家介绍一下关于Jupyter Notebook的用法 关于它的组成部分就先不在这里详细解说啦~ 毕竟我可太懂你们啦~ 文章太长就会吃灰的~ 源码、资料电子书免费获取可点击这里 一、什么是Jupyter Notebook&#xff1f; 1. 简介 Jupyter Not…

vue3 弹窗开发之三,完善版

首先我们看一看整体的效果 点击图一的缩略图&#xff0c;查看大图&#xff08;如图二&#xff09;。同时弹窗内容底下有当前所有图片的缩略图展示&#xff0c;同时通过一个橙色的边框定位当前缩略图的位置。切换左右箭头滚动下一站或者上一张&#xff0c;同时底下缩略图同步有个…

mybatis的xml中<trim>标签的用法

文章目录1. 前言2. 先说结论3. 验证1. 情况一2. 情况二3. 情况三4. 情况四5. 验证prefixOverrides去掉的是trim内原sql内容1. 前言 在工作中离不开跟数据库打交道&#xff0c;目前流行的固然是mybatis&#xff0c;在xml中写sql的时候&#xff0c;可能会出现下面情况&#xff1a…

线性表的顺序实现【C语言版的真代码】

顺序表线性表顺序表顺序表的概念及其结构顺序表基本操作顺序表的初始化顺序表的插入顺序表的删除顺序表的查找线性表 线性表&#xff1a;一个线性表是含n个数据元素的有限序列。 它的逻辑结构要求是线性的&#xff0c;但其存储结构并没有做要求&#xff0c;即逻辑结构类似于如…