Если вы хотите разместить AnimationCanvas непосредственно в центральном виджете, тогда вызовите setParent
в конструкторе.
class AnimationCanvas(FigureCanvas):
def __init__(self, parent=None, width=5, height=4, dpi=100):
...
super(AnimationCanvas, self).__init__(self.fig)
self.setParent(parent)
И создайте AnimationCanvas с родительским widget
, центральным виджетом QMainWindow. Вызов setGeometry
в QPushButton теперь будет работать, он будет помещен в AnimationCanvas в позиции (5, 5) с размером (50, 25).
class MainWindow(QtWidgets.QMainWindow):
def __init__(self,xdata=None, *args, **kwargs,):
super(MainWindow, self).__init__(*args, **kwargs)
widget = QWidget()
self.setCentralWidget(widget)
self.canvas = AnimationCanvas(parent=widget, width=5, height=4, dpi=100)
self.plot_button = QtWidgets.QPushButton(self.canvas)
self.plot_button.setGeometry(QtCore.QRect(5, 5, 50, 25))
self.setGeometry(300, 300, 800, 600)
Если вы используете макет, то setGeometry
обычно игнорируется, поскольку макет управляет положением и размером всех его виджетов. Однако вы можете добавить в макет только AnimationCanvas, но не QPushButton, что позволит ему оставаться в AnimationCanvas с точной указанной вами геометрией.
class MainWindow(QtWidgets.QMainWindow):
def __init__(self,xdata=None, *args, **kwargs,):
super(MainWindow, self).__init__(*args, **kwargs)
widget = QWidget()
self.setCentralWidget(widget)
vbox = QVBoxLayout(widget)
self.canvas = AnimationCanvas(width=5, height=4, dpi=100)
vbox.addWidget(self.canvas)
self.plot_button = QtWidgets.QPushButton(self.canvas)
self.plot_button.setGeometry(QtCore.QRect(5, 5, 50, 25))
self.setGeometry(300, 300, 800, 600)