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 应用程序。

相关推荐
bobz9652 小时前
小语言模型是真正的未来
后端
DevYK3 小时前
企业级 Agent 开发实战(一) LangGraph 快速入门
后端·llm·agent
一只叫煤球的猫3 小时前
🕰 一个案例带你彻底搞懂延迟双删
java·后端·面试
冒泡的肥皂3 小时前
MVCC初学demo(一
数据库·后端·mysql
颜如玉4 小时前
ElasticSearch关键参数备忘
后端·elasticsearch·搜索引擎
卡拉叽里呱啦5 小时前
缓存-变更事件捕捉、更新策略、本地缓存和热key问题
分布式·后端·缓存
David爱编程5 小时前
线程调度策略详解:时间片轮转 vs 优先级机制,面试常考!
java·后端
码事漫谈6 小时前
C++继承中的虚函数机制:从单继承到多继承的深度解析
后端
阿冲Runner6 小时前
创建一个生产可用的线程池
java·后端
写bug写bug6 小时前
你真的会用枚举吗
java·后端·设计模式