基于PyQt 绘制多个变量的动图

Pyqt 多参数控制绘图 采用spinbox 和horizionslider 控制sin曲线的幅值和相位的变换。

主程序如下:

# -*- coding: utf-8 -*-
import sys
import os
import random
import time
import numpy as np
import matplotlib
matplotlib.use("Qt5Agg")
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QVBoxLayout, QSizePolicy, QMessageBox, QWidget
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from numpy import arange
import pandas as pd
import ControlCanvas


class Ui_MainWindow(object):	
	def setupUi(self, MainWindow):
		MainWindow.setObjectName("MainWindow")
		self.screen = QtWidgets.QDesktopWidget().screenGeometry()
		MainWindow.setGeometry(10, 50, self.screen.width()/4,self.screen.height()/4)
		# MainWindow.resize(self.screen.width()/4,self.screen.height()/4)
		# MainWindow.showMaximized()
		self.centralWidget = QtWidgets.QWidget(MainWindow)
		s
PyQt 中使用信号与槽处理多个变量可以通过以下几种方式实现: ### 自定义信号携带多个参数 可以自定义信号,并为其指定多个参数,在信号发射时传递多个变量的值。以下是示例代码: ```python import sys from PyQt5.QtCore import pyqtSignal, QObject from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton class MyObject(QObject): # 定义一个自定义信号,携带两个参数 multi_variable_signal = pyqtSignal(int, str) def send_signal(self): num = 10 text = "Hello" # 发射信号并传递多个变量的值 self.multi_variable_signal.emit(num, text) class MyWidget(QWidget): def __init__(self): super().__init__() self.label = QLabel(self) layout = QVBoxLayout() layout.addWidget(self.label) self.setLayout(layout) obj = MyObject() # 将信号连接到槽函数 obj.multi_variable_signal.connect(self.handle_multi_variable) button = QPushButton("Send Signal", self) button.clicked.connect(obj.send_signal) def handle_multi_variable(self, num, text): # 处理接收到的多个变量 result = f"Received: {num}, {text}" self.label.setText(result) if __name__ == '__main__': app = QApplication(sys.argv) window = MyWidget() window.show() sys.exit(app.exec()) ``` 在这个例子中,`MyObject` 类定义了一个自定义信号 `multi_variable_signal`,它携带两个参数(一个整数和一个字符串)。当按钮被点击时,`send_signal` 方法会发射这个信号并传递两个变量的值。`MyWidget` 类中的 `handle_multi_variable` 槽函数接收这两个变量并进行处理。 ### 多个信号连接一个槽处理不同变量 可以将多个信号连接到同一个槽函数,每个信号传递不同的变量值。示例如下: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel class MyWidget(QWidget): def __init__(self): super().__init__() self.label = QLabel(self) layout = QVBoxLayout() layout.addWidget(self.label) self.setLayout(layout) button1 = QPushButton("Button 1", self) button2 = QPushButton("Button 2", self) # 连接信号到同一个槽函数 button1.clicked.connect(lambda: self.handle_variable(10, "Button 1")) button2.clicked.connect(lambda: self.handle_variable(20, "Button 2")) layout.addWidget(button1) layout.addWidget(button2) def handle_variable(self, num, text): result = f"Received from {text}: {num}" self.label.setText(result) if __name__ == '__main__': app = QApplication(sys.argv) window = MyWidget() window.show() sys.exit(app.exec()) ``` 这里有两个按钮,每个按钮的 `clicked` 信号都连接到 `handle_variable` 槽函数,但传递了不同的变量值。 ### 信号与槽使用元组或列表传递多个变量 可以通过元组或列表的形式将多个变量打包传递。示例如下: ```python import sys from PyQt5.QtCore import pyqtSignal, QObject from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton class MyObject(QObject): multi_variable_signal = pyqtSignal(tuple) def send_signal(self): data = (100, "Python", True) self.multi_variable_signal.emit(data) class MyWidget(QWidget): def __init__(self): super().__init__() self.label = QLabel(self) layout = QVBoxLayout() layout.addWidget(self.label) self.setLayout(layout) obj = MyObject() obj.multi_variable_signal.connect(self.handle_multi_variable) button = QPushButton("Send Signal", self) button.clicked.connect(obj.send_signal) def handle_multi_variable(self, data): num, text, flag = data result = f"Received: {num}, {text}, {flag}" self.label.setText(result) if __name__ == '__main__': app = QApplication(sys.argv) window = MyWidget() window.show() sys.exit(app.exec()) ``` 在这个例子中,自定义信号 `multi_variable_signal` 携带一个元组,元组中包含多个变量。槽函数接收到元组后进行解包处理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值