当前位置: 首页 > news >正文

pyqt-3(QSS、读取带qrc的ui、信号与槽函数)

一、在QTDesigner中的QSS的基本使用

使用时最好在空白处点击改变样式表进行全局设置,这样便于管理

#表示各个类的内部细分组件:

*{background-color: rgb(255, 255, 255);
}
QFrame#frame{border-image: url(:/picture/Logo/shanChuan.jpg);border-radius:30px;
}
#frame_2{background-color: rgba(150, 150, 150, 100);border-radius:30px;
}
#frame_3{border-image:url(:/picture/src/cancel.png);}
QLabel#label{background-color: rgba(80, 80, 80, 160);border-radius:30px;
}
QLabel#label_2{background-color: transparent;/*完全透明*/font: 25pt "汉仪书魂体简";color: rgba(255, 255, 255, 190);}
#label_3{background-color: transparent;/*完全透明*/font: 8pt "黑体";text-decoration: underline;color: rgba(255, 255, 255, 190);
}QLineEdit{background-color: transparent;/*完全透明*//*border-radius:30px;*//*background-color: rgba(176, 176, 176, 150);*/border: none;border-bottom:1px solid rgba(255, 255, 255,180);font: 12pt "Segoe UI";font: 12pt "楷体";color: rgb(255, 255, 255);}
QPushButton{background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(68, 66, 49, 255), stop:1 rgba(255, 255, 255, 0));border-radius:5px;font: 16pt "楷体";
}
QPushButton:hover{ /*hover表示鼠标移动时*/background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(68, 66, 49, 255), stop:1 rgba(255, 255, 255, 100));border-radius:5px;font: 16pt "楷体";
}
QPushButton:pressed{ /*鼠标按下*/background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(68, 66, 49, 255), stop:1 rgba(255, 255, 255, 100));border-radius:5px;font: 16pt "楷体";paddinf-top:5px;padding-right:5px;
}
QPushButton#pushButton_2{border-image: url(:/picture/src/cancel.png);border-radius:30px;
}

效果

二、读取带qrc的ui

1】在终端下载pyside6

功能:可以使用pyside6将XX.qrc资源文件转换成XX.py

1> win + R 处输入 cmd

2> pip install PySide6 -i https://pypi.tuna.tsinghua.edu.cn/simple

2】 项目引入资源

1> cmd 到当前的项目目录

pyside6-uic.exe test.ui -o test.py #将ui界面文件转化成py文件 
pyside6-rcc res.qrc -o res_rc.py # 将.qrc文件转化成py文件

方式1:

2> 在ui界面对应的py文件中 导入资源文件后 输入以下代码 直接运行

方式二:

三、信号与槽函数

1、系统信号与槽函数

"""
槽函数的定义
槽函数(slot function)是信号 - 槽机制中的一个重要概念,主要用在图形用户界面(GUI)开发框架(如Qt)中。信号 - 槽机制是一种对象之间的通信机制。当某个事件(如用户点击按钮)发生时,
会发出一个信号,而槽函数就是用来响应这个信号的函数。例如,在一个简单的登录界面中,当用户点击“登录”按钮时,
按钮会发出一个信号,槽函数可以是验证用户名和密码是否正确的函数。一旦信号被触发,槽函数就会被调用,从而实现相应的功能。为什么叫槽函数
这个名称来源于信号 - 槽机制的英文“signal - slot mechanism”。其中“slot”一词有“槽”的意思。从形象的角度理解,信号就像是一个要插入某个地方的“信号棒”,
而槽函数就像是一个可以容纳这个信号的“槽”。信号和槽函数之间通过连接(connect)操作建立关联,信号发出后,就会“落入”对应的槽函数中,从而触发槽函数的执行。
这种命名方式形象地描述了信号和槽函数之间的关系,就像物品和其存放位置的关系一样。
"""
import sysfrom PyQt6 import uic
from PyQt6.QtTextToSpeech import QTextToSpeech
from PyQt6.QtWidgets import QApplication, QWidget, QPushButtonnum = 3class MyWidget(QWidget):def __init__(self):super().__init__()# 通过uic 将ui界面加载到程序中来# uic.loadUi("./Form.ui") # 不能显示完全的界面ui = uic.loadUi("./signalAndSlots.ui", self)self.btn1: QPushButton = ui.btn1self.btn2: QPushButton = ui.btn2  # 引用绑定btn2self.btn3: QPushButton = ui.btn3  # 引用绑定btn3self.btn4: QPushButton = ui.btn4  # 引用绑定btn4"""1、self.btn2.clicked信号连接(connect)槽函数self.btn2_slot"""# 点击btn1时btn2变色self.btn2.clicked.connect(self.btn2_slot)  # 当触发点击时间时发送信号至槽函数,槽函数自动执行self.btn1.clicked.connect(self.btn1_slot)self.btn3.clicked.connect(self.btn3_slot)# 点击按钮4实现语音播报【QTextToSpeech】# 一个信号可以连接多个槽函数,反之亦然self.btn4.clicked.connect(self.btn4_slot)self.btn4.clicked.connect(self.btn3_slot)self.speecher = QTextToSpeech()"""2、槽函数的编写"""def btn1_slot(self):global numif num % 3 == 0:self.btn3.setStyleSheet("background-color:red")elif num % 3 == 1:self.btn3.setStyleSheet("background-color:green")else:self.btn3.setStyleSheet("background-color:blue")def btn2_slot(self):self.btn1.setStyleSheet("background-color: rgb(255, 255, 0)")self.btn1.setEnabled(False)self.btn1.resize(300, 300)self.btn1.move(100, 100)def btn3_slot(self):self.btn2.resize(self.btn2.width() + 3, self.btn2.height() + 3)def btn4_slot(self):global numif num % 3 == 1:self.speecher.say(self.btn1.text())elif num % 3 == 2:  # %左边数<右边时结果=左边数self.speecher.say(self.btn2.text())elif num % 3 == 0:self.speecher.say(self.btn3.text())if __name__ == '__main__':app = QApplication(sys.argv)myWidget = MyWidget()myWidget.show()sys.exit(app.exec())

2、自定义信号和槽函数、

在需要时槽函数不必在类内,若存在多个窗口,可以写在class外共各个窗口全局使用,窗口只要在主程序中实例化了,槽函数便可直接使用。

"""
1】一个信号可以连接多个槽函数
2】一个槽函数可以连接多个信号
3】信号的形参的类型和槽函数的参数类型 必须保持一致
4】信号的形参个数 >= 槽函数的参数个数"""from PySide6.QtCore import Signal, QObject"信号"
class Person(QObject):# 使用信号类Signal实例化自定义的信号对象speak = Signal(str)"槽"
def speak_world(world):print(world)if __name__ == '__main__':# 实例化personperson = Person()person.speak.connect(speak_world)# 自定义的信号需要手动触发person.speak.emit("Hello World!")

思维导图:

四、login登录界面的优化

"""
引入信号和槽函数pyside6-uic.exe test.ui -o test.py  #将ui界面文件转化成py文件
pyside6-rcc res.qrc -o res_rc.py  # 将.qrc文件转化成py文件
"""
import sysfrom PySide6.QtCore import Qt
from PySide6.QtWidgets import QWidget, QApplication, QPushButton,QMainWindow,QToolBar,QDockWidget,QMessageBox
from qss_login_v3_ui import Ui_Form
from ui_2 import Ui_MainWindowfrom PyQt6 import uic# pyside6-uic.exe ui_2.ui -o ui_2.py
class myWindow(QWidget, Ui_Form):  # 多重继承,同时存在QWidget和Ui_Form的功能,这种ui读取方法不可与之前的混用def __init__(self):super().__init__()# 加载ui文件ui = self.setupUi(self)  # 用 Ui_Form 类中的 setupUi() 方法,把设计好的 UI 元素(按钮xi、输入框、布局等)挂载到 myWindow 这个 QWidget 实例上。self.pushButton_2.clicked.connect(self.pushButton_2_slot)  # 不需要self.pushButton_2:QPushButton = self.pushButton_2,用setupUi已经直接加载到self了,与uic.load不同self.pushButton.clicked.connect(pushButton_slot)def pushButton_2_slot(self):self.close()class window_2(QMainWindow, Ui_MainWindow):  # setupUi读取而不是uic.load,因为PySide6和PyQt6存在区别# 以下不再频繁采用designer,用designer修改需要频繁用命令生成py文件,只适合初步设计def __init__(self):super().__init__()# 加载ui文件ui = self.setupUi(self)  # 用 Ui_Form 类中的 setupUi() 方法,把设计好的 UI 元素(按钮、输入框、布局等)挂载到 myWindow 这个 QWidget 实例上。# 菜单栏# menuBar = self.menuBar()# self.setMenuBar(menu)#工具栏toolBar = QToolBar(self)  # 表明从属于selfself.addToolBar(Qt.ToolBarArea.LeftToolBarArea,toolBar) # 表示在self中显示self.menu_btn1 = QPushButton('消息')self.menu_btn2 = QPushButton('联系人')toolBar.addWidget(self.menu_btn1)toolBar.addWidget(self.menu_btn2)# 状态栏# 浮动窗口docker = QDockWidget(self)self.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea,docker)docker.addAction("aaa")# 设置 QDockWidget 的特性,禁止浮动和移动docker.setFeatures(QDockWidget.DockWidgetClosable)  # 只允许关闭,不允许浮动和移动self.dock_btn1 = QPushButton('aaa建材王总1')docker.setWidget(self.dock_btn1)
def pushButton_slot():  # 将槽函数设为全局可用而不是某一类下if window.lineEdit.text() == "admin" and window.lineEdit_2.text() == "123456":# python基础:window.lineEdit.text()钟text后面要加一个括号是因为这是一个函数,若window.lineEdit.text是一个对象就不需要括号print("匹配成功")window.close()window_2.show()else:print("匹配失败")window.lineEdit.setText("")window.lineEdit_2.setText("")QMessageBox.information(window, "提示", "帐号或密码错误") # window表示父窗口if __name__ == '__main__':app = QApplication(sys.argv)window = myWindow()# 设置纯净窗口(无边框)window.setWindowFlag(Qt.WindowType.FramelessWindowHint)# 去掉窗口多余的空白部分-----------------------------------------------------------------------------------------------window.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)window.show()window_2 = window_2()sys.exit(app.exec())

输入错误:

输入正确:

点击登录后:

http://www.dtcms.com/a/273036.html

相关文章:

  • CMake指令:add_custom_command和add_custom_target详解
  • Vue响应式原理五:响应式-自动收集依赖
  • OKHttp 核心知识点详解
  • 页面html,当鼠标点击图标,移开图标,颜色方块消失
  • 【牛客刷题】跳台阶(三种解法深度分析)
  • doker以及网站案例
  • 快速上手ASP .NET Core 8与MongoDB整合
  • 200W 以内的伺服电机 典型应用场景
  • C语言顺序表:从零开始,解锁数据结构之门!
  • YOLO系列pt导出不同onnx方法
  • Renren框架DistributeLock排他锁实现详解
  • 企业内网系统:从传统开发到智能赋能的进化之路
  • 安达发|医疗器械行业APS自动排单:智能化生产管理的未来之路
  • useRef跨渲染周期存储
  • 数据结构 --- 队列
  • 10.Docker安装mysql
  • chatgpt是怎么诞生的,详解GPT1到GPT4的演化之路及相关背景知识
  • dexie 前端数据库封装
  • 使用快捷键迅速校准多个通道 | IPEmotion
  • 软件技术:柯里化
  • 《PyQt6-3D应用开发技术文档》
  • 仿豆包智能输入框实现
  • python基础25_某大网校(下)处理json数据以及保存题库
  • 安全访问云端内部应用:用frp的stcp功能解决SSH转发的痛点
  • Linux驱动开发(platform 设备驱动)
  • 老题新解|矩阵转置
  • AI驱动的业务系统智能化转型:从非结构化到结构化的智能转换
  • 【STM32 学习笔记】FLASH闪存
  • pytorch学习-12循环神经网络(基础篇)
  • 机器视觉之激光码检测系统