PyQt 高级部分学习 - 第一篇

自定义组件和信号槽机制

在这一篇中,我们将探讨如何在 PyQt 中创建自定义组件和使用高级的信号槽机制。

自定义组件

自定义组件允许你创建具有特定功能和外观的新组件。下面是一个自定义按钮组件的示例:

python 复制代码
from PyQt5.QtWidgets import QPushButton, QApplication, QWidget, QVBoxLayout

class MyCustomButton(QPushButton):
    def __init__(self, text):
        super().__init__(text)
        self.setFixedSize(100, 50)

    def mousePressEvent(self, event):
        print("Custom button clicked!")

app = QApplication([])
window = QWidget()
layout = QVBoxLayout()

button = MyCustomButton("Click Me")
layout.addWidget(button)

window.setLayout(layout)
window.show()
app.exec_()

高级信号槽机制

PyQt 的信号槽机制不仅限于简单的点击事件,还可以传递参数和使用自定义信号。

python 复制代码
from PyQt5.QtCore import pyqtSignal, QObject

class MySignal(QObject):
    my_custom_signal = pyqtSignal(str)

    def run(self):
        self.my_custom_signal.emit("Hello, World!")

def my_slot(message):
    print("Received:", message)

signal_instance = MySignal()
signal_instance.my_custom_signal.connect(my_slot)
signal_instance.run()

Model-View-Controller (MVC) 模式

在 PyQt 中,你可以使用 MVC 模式来组织代码和分离关注点。

python 复制代码
# Model
class MyModel:
    def get_data(self):
        return ["Item 1", "Item 2", "Item 3"]

# View
class MyView(QWidget):
    def __init__(self, model):
        super().__init__()
        self.model = model
        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()
        data = self.model.get_data()
        for item in data:
            layout.addWidget(QPushButton(item))
        self.setLayout(layout)

# Controller
class MyController:
    def __init__(self):
        self.model = MyModel()
        self.view = MyView(self.model)
        self.view.show()

app = QApplication([])
controller = MyController()
app.exec_()

总结

在这篇文章中,我们探讨了如何在 PyQt 中创建自定义组件,使用高级的信号槽机制,以及如何使用 MVC 模式来组织代码。这些高级特性将有助于你创建更加复杂和可维护的 PyQt 应用程序。

相关推荐
西安邮电大学18 分钟前
2026华为OD机考真题附答案-准备生日礼物
java·后端
Trouvaille ~20 分钟前
【Redis篇】Hash 哈希:字段级操作与对象存储的最佳实践
数据库·redis·后端·算法·缓存·哈希算法·键值对
Rust研习社34 分钟前
Nightly 前瞻:cargo-script 让 Rust 也能写脚本
后端·rust·编程语言
AskHarries35 分钟前
Chrome 插件有没有机会
后端
浩风祭月37 分钟前
一次诡异的 MySQL 死锁,靠 AI 分析日志十分钟定位根因
后端·ai编程
我是一颗柠檬43 分钟前
【MySQL全面教学】MySQL子查询与高级查询Day7(2026年)
数据库·后端·mysql
CodePlayer竟然被占用了1 小时前
Claude Code 出安全插件了:AI 写代码的安全网,终于有人正经做了
人工智能·后端
明月_清风1 小时前
Base64:用 33% 的体积膨胀,买一张在文本世界通行的门票
后端
得物技术1 小时前
HorizonVault 技术深潜:如何在 HDD 上做出 100GB/s+ 级大吞吐分布式存储|得物技术
大数据·后端·kafka
码不停蹄的玄黓2 小时前
SpringBoot 自动装配原理
java·spring boot·后端