Python Matplotlib设置轴限制在_init___中工作,但不在按钮单击时工作?

Python Matplotlib设置轴限制在_init___中工作,但不在按钮单击时工作?,python,matplotlib,pyqt,pyqt5,Python,Matplotlib,Pyqt,Pyqt5,我正在写一个中型应用程序来查看一些数据。其结构是,绘图将保存在QTabWidget界面中,并使用绘图控制小部件调整x限制(稍后,控制小部件中可能会有更多功能)。我在下面列出了一个最小的可复制示例 目前,我将图形的轴传递给我的控制小部件,并在该小部件中单击按钮后更改x限制。我已经验证了axis是否正在被传递到小部件(带有打印语句)。我可以在widget uuu init uuu函数中以编程方式设置轴限制(参见第91行:self.Fig_ax.set_xlim(52000)),它可以工作,但在按钮单

我正在写一个中型应用程序来查看一些数据。其结构是,绘图将保存在QTabWidget界面中,并使用绘图控制小部件调整x限制(稍后,控制小部件中可能会有更多功能)。我在下面列出了一个最小的可复制示例

目前,我将图形的轴传递给我的控制小部件,并在该小部件中单击按钮后更改x限制。我已经验证了axis是否正在被传递到小部件(带有打印语句)。我可以在widget uuu init uuu函数中以编程方式设置轴限制(参见第91行:self.Fig_ax.set_xlim(52000)),它可以工作,但在按钮单击函数中,相同的语法没有任何作用。但是,对于print语句,我验证了轴仍然被传递到button click函数

我很困惑为什么set_xlims方法在uuu init_uuuuuuuuuuu中工作,而不是在按下按钮时工作。使用:运行代码,在“X最小值”和“X最大值”字段中输入一个数字,然后单击“应用X限制”按钮。在本例中,我对按钮click axis shift进行了硬编码,以定义限制,而不是使用输入到字段中的内容,但这些字段确实会打印到控制台以进行调试

#/usr/bin/env蟒蛇3
#-*-编码:utf-8-*-
"""
创建
"""
导入系统
从PyQt5.QtGui导入*
从PyQt5.QtWidgets导入*
从PyQt5.QtCore导入*
##导入matplotlib和动画
导入功能工具
将随机导入为rd
将numpy作为np导入
从numpy导入数组,sin,pi,arange
从matplotlib.figure导入图形
将matplotlib.pyplot作为plt导入
作为pd进口熊猫
##导入线程
导入时间
从matplotlib.backends.qt_compat导入QtCore、QtWidgets
从matplotlib.backends.backend_qt5agg导入(FigureCanvas,NavigationToolbar2QT as NavigationToolbar)
##新的:
从PyQt5.QtWebEngineWidgets导入*
######################################################8
类AppWindow(QMainWindow):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.title='DDBRT'
self.setWindowTitle(self.title)
self.DDBRT_Widget=DDBRT(self)#调用DDBRT
self.setCentralWidget(self.DDBRT_小部件)#将其设置为窗口中的中心小部件
self.show()
####
####
''结束应用程序窗口''
#2019年8月27日开始构建一个定制的QWidget,可以在多个实例中放入该工具以调整XLIM。
#这也可以作为其他自定义小部件的模板
类XLimControlWidget(QWidget):
定义初始值(自、父、**kwargs):
超级(QWidget,self)。\uuuuu初始化\uuuuuuuuuu(父级)
#设置布局:
self.XLCWLayout=QVBoxLayout(self)
#插入X最小框标签
self.XMinSelectLbl=QLabel('Set X Min:'))
self.XLCWLayout.addWidget(self.XMinSelectLbl)
#插入X最小输入字段
self.xmentryfield=QLineEdit('X Min')
self.XLCWLayout.addWidget(self.xmentryfield)
#插入X最大框标签
self.XMaxSelectLbl=QLabel('Set X Min:')
self.XLCWLayout.addWidget(self.XMaxSelectLbl)
#插入X最大框输入字段
self.XMaxEntryField=QLineEdit('X Max')
self.XLCWLayout.addWidget(self.XMaxEntryField)
#插入设置按钮
self.SetXLimsBtn=QPushButton('Apply X Limits')
self.XLCWLayout.addWidget(self.SetXLimsBtn)
#调整布局,使此小部件紧凑:
self.XLCWLayout.setSpacing(0)
self.XLCWLayout.setContentsMargins(0,0,0,0)
#注意,这实际上不起作用,而且看起来仍然很难看
#这很烦人,但不值得现在就想办法解决。
#需要将重点放在行为编程上。
#尝试kwargs传球,确保传球有效。
对于键,kwargs.items()中的值:
打印(“%s=%s%”(键,值))
####
self.Fig_ax=kwargs['Fig_ax_Key']
打印('self.Fig\u ax=%s,类型为%s%%(self.Fig\u ax,类型为(self.Fig\u ax)))
#尝试fig ax set xlim,它可以工作,但不能。
自身图最大设定值(5,20000)
self.SetXLimsBtn.clicked.connect(self.SetXLimsBtnClkd)
####    
def SetXLimsBtnClkd(自我):#定义单击按钮时发生的情况。
self.xmin=float(self.xmentryfield.text())
打印('X Min将为',self.xmin,'类型',类型(self.xmin))
self.xmax=float(self.XMaxEntryField.text())
打印('X Max将为',self.xmax,'类型',类型(self.xmax))
打印('self.Fig\u ax=%s,类型为%s%%(self.Fig\u ax,类型为(self.Fig\u ax)))
自身图最大设定值(20,45)
#最终目标:
#self.Fig\u ax.set\u xlim(self.xmin,self.xmax)
####
####        
类DDBRT(QWidget):
定义初始化(自身,父级):
超级(QWidget,self)。\uuuuu初始化\uuuuuuuuuu(父级)
#%%设置多线程
self.threadpool=QThreadPool()#为多线程设置QThreadPool,以便GIL不会冻结GUI
打印(“最多%d个线程的多线程处理”%self.threadpool.maxThreadCount()
#%%布局:
##集合布局
self.MainLayout=QGridLayout(self)
##创建并嵌入复选框占位符
self.ChkBx_占位符=QCheckBox('ChkBxPlcholdr1');
self.MainLayout.addWidget(self.ChkBx_占位符,3,0)
##创建并嵌入选项卡容器以保存绘图等。
#初始化选项卡容器
self.TabsContainer=QTabWidget()
#初始化选项卡
self.tab0=QWidget()
#添加选项卡
self.tabscocontainer.addTab(self.tab0,“tab0”)
#填充第0个选项卡
self.tab0.layout=QGridLayout(self)
self.pushButton0=QPushButton(“PyQt5按钮”)
self.tab0.layout.addWidget(self.pushButton0)
self.tab0.setLayout(self.tab0.layout)
#将TabsContainer添加到小部件
self.MainLayout.addW